UIScrollview 停留在不正确的 contentOffset(-20 px,而不是 0px)
Posted
技术标签:
【中文标题】UIScrollview 停留在不正确的 contentOffset(-20 px,而不是 0px)【英文标题】:UIScrollview resting at incorrect contentOffset (-20 px, not 0px) 【发布时间】:2018-01-18 11:09:07 【问题描述】:我有一个在 y 轴上展开的 UIScrollview 并调用这个委托方法:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
float yOff = scrollView.contentOffset.y;
NSLog(@"y off is %f", yOff);
当 scrollView 移到顶部时(即 yOff == 0),它实际上在大多数手机上静止在 -20px 上,在 iPhoneX 上静止在 -44px 上。如何关闭此行为,这样做有什么风险?
【问题讨论】:
这可能会有所帮助:***.com/questions/18798792/… 您是否在视图控制器中定义了滚动视图?你能和我们分享你的代码吗? 其实你的scrollview使用的是VC的top layout,所以是从-20px开始的。如果你实际检查它的 x 位置也会被相同的像素位移。 @dahiya_boy 是的,我看到确保 uiscrollview 不是源自视图控制器视图的顶部是一种解决方法,即。 scrollview.frame = CGRectMake(0, 50, width, height-100),沿着这些线。 如果您支持 iPhone X,请使用安全区域指南 【参考方案1】:尝试将UIScrollView
上的contentInsetAdjustmentBehavior
设置为.never
if (@available(ios 11.0, *))
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
【讨论】:
或者,如果您想保留(自动)内容插入调整设置,请在运行时使用scrollview.adjustedContentInset.y
获取调整后的值,这样您就知道当时设备上的偏移量是多少。 doc【参考方案2】:
试试这个:
#define IPHONE4 (( [ [ UIScreen mainScreen ] bounds ].size.height == 480 ) ? 1 :0)
#define IPHONE5 (( [ [ UIScreen mainScreen ] bounds ].size.height == 568 ) ? 1 :0)
#define IPHONE6 (( [ [ UIScreen mainScreen ] bounds ].size.height == 667 ) ? 1 :0)
#define IPHONE6p (( [ [ UIScreen mainScreen ] bounds ].size.height == 736 ) ? 1 :0)
#define IPHONEX (( [ [ UIScreen mainScreen ] bounds ].size.height == 812 ) ? 1 :0)
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
if (IPHONEX)
scrollView.contentOffset = CGPointMake(0,44);
else
scrollView.contentOffset = CGPointMake(0,20);
【讨论】:
以上是关于UIScrollview 停留在不正确的 contentOffset(-20 px,而不是 0px)的主要内容,如果未能解决你的问题,请参考以下文章
修复 UIScrollView 顶部和底部的 CALayer
如何在不将 UIScrollView 的 delaysContentTouches 设置为 NO 的情况下快速点击它时使 UIScrollView 中的按钮突出显示