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)的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 没有正确旋转?

修复 UIScrollView 顶部和底部的 CALayer

在不使用捏/UIScrollView 的情况下缩小照片

如何在不将 UIScrollView 的 delaysContentTouches 设置为 NO 的情况下快速点击它时使 UIScrollView 中的按钮突出显示

如何在不丢失触摸事件的情况下冻结 UIScrollView 滚动

UIScrollView 内容大小在不应该时裁剪子视图