额外20px顶部插入UIScrollView问题

pad*_*apa 11 objective-c uiscrollview ios

有人问过有关这个问题的问题.我尝试了一切,无法解决我的问题.我挣扎了2个小时,现在我在这里张贴.

问题:UIScrollView的顶级contentInset总是有20px的额外空间.

我有viewcontroller xib,而不是storyboard.

首先,相关问题及其在stackoverflow上的解决方案假设UIScrollView是UIViewController的根视图.但我的滚动视图不是根视图,因此可能为什么

self.automaticallyAdjustsScrollViewInsets = NO;

不管用

  • 我有一个带有引导空间(0,superview)的HeaderView,尾随空格(0,超级视图),顶部空间(0,superview)和固定高度.
  • 标题视图下方是滚动视图,前导空格(0,superview),尾随空格(0,superview),底部空间(0,superview)和垂直空间(0,标题视图)
  • 滚动视图内部有一个内容视图.此视图具有前导(0),尾随(0),底部(0)和顶部(0)空间到scrollview.

这是额外的20 px顶部插图的屏幕截图.额外20px是UIScrollView的白线和浅灰色内容之间的黑色区域我无法修复此问题. 在此输入图像描述

难道我做错了什么?Autolayout约束似乎很好.

Pau*_*uls 28

你的控制器是否嵌入了navigationController?似乎iOS在顶部留下20px的状态栏,但你的控制器没有.

无论哪种方式,在viewDidLoad中,如果在调用super之前调整scrollView,它应该可以工作:

   - (void)viewDidLoad {
    self.automaticallyAdjustsScrollViewInsets = NO;
    self.scrollView.contentInset = UIEdgeInsetsMake(0,0,0,0); 
    [super viewDidLoad];
    }
Run Code Online (Sandbox Code Playgroud)

iOS可能会自动强制您的scrollView具有20px TOP contentInset的原因是因为它可能是主视图中索引为0的视图.你可以在这里进一步阅读:http://b2cloud.com.au/how-to-guides/uiviewcontroller-changes-in-ios7

默认情况下,UIViewController将在视图索引0处自动调整其UIScrollView(包括UITableViews)的内容插入.这意味着如果桌面视图后面有按钮,标签或任何其他视图,您将不会免费获得此行为.


Der*_*ote 8

这是 Pauls 在 SWIFT 4 中接受的答案:

override func viewDidLoad() {
    backGroundScrollView.contentInsetAdjustmentBehavior = .never
    backGroundScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

    super.viewDidLoad()
}
Run Code Online (Sandbox Code Playgroud)


MMi*_*lav 5

对于 iOS 11.1 及更高版本:

雨燕5

if #available(iOS 11.1, *) {
    self.tableView.verticalScrollIndicatorInsets.top = CGFloat.leastNonzeroMagnitude
}
Run Code Online (Sandbox Code Playgroud)

对象C

if (@available(iOS 11.1, *)) {
    self.tableView.verticalScrollIndicatorInsets = UIEdgeInsetsMake(__DBL_MIN__, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

我不使用 的原因是0CGFloat.leastNonzeroMagnitude在某些情况下,当值设置为时,iOS 应用默认值0