额外20px顶部插入UIScrollView问题

时间:2015-04-18 17:59:39

标签: ios objective-c uiscrollview

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

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

我有viewcontroller xib,而不是storyboard。

首先,相关问题及其在stackoverflow上的解决方案假设UIScrollView是UIViewController的根视图。但我的scrollview不是root视图,因此可能

  

self.automaticallyAdjustsScrollViewInsets = NO;

无效

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

这是额外的20 px顶部插图的屏幕截图。额外20px是UIScrollView的白线和浅灰色内容之间的黑色区域我无法修复此问题。 enter image description here

我做错了吗? Autolayout约束似乎很好。

3 个答案:

答案 0 :(得分:26)

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

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

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

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

  

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

答案 1 :(得分:0)

这是Pauls在SWIFT 4中公认的答案:

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

    super.viewDidLoad()
}

答案 2 :(得分:0)

对于iOS 11.1和更高版本:

快速5

if #available(iOS 11.1, *) {
    self.tableView.verticalScrollIndicatorInsets.top = CGFloat.leastNonzeroMagnitude
}

ObjC

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

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