有人提出有关这个问题的问题。我尝试了一切,无法解决我的问题。我挣扎了2个小时,现在我在这里张贴。
问题:UIScrollView的顶级contentInset总是有20px的额外空间。
我有viewcontroller xib,而不是storyboard。
首先,相关问题及其在stackoverflow上的解决方案假设UIScrollView是UIViewController的根视图。但我的scrollview不是root视图,因此可能
self.automaticallyAdjustsScrollViewInsets = NO;
无效
这是额外的20 px顶部插图的屏幕截图。额外20px是UIScrollView的白线和浅灰色内容之间的黑色区域我无法修复此问题。
我做错了吗? Autolayout约束似乎很好。
答案 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应用默认值