iOS 11、状态栏、导航栏和 UIScrollview

Posted

技术标签:

【中文标题】iOS 11、状态栏、导航栏和 UIScrollview【英文标题】:iOS 11, Status bar, Navigation Bar and UIScrollview 【发布时间】:2017-09-16 03:53:08 【问题描述】:

我正在对 ios 11 的应用程序进行一些更新,但遇到了一些我无法理解的问题。我的视图控制器以编程方式创建其所有子视图。

第一个孩子是一个 Imageview。最重要的是,我添加了一个 UIScrollView。在滚动视图中有一个 UIView 和一个标签。我正在通过代码使用 SnapKit 进行自动布局约束。

iOS 9 和 iOS 10 运行良好 - 没有问题。然而,在 iOS 11 中,它 似乎 可以正常工作,直到我“下拉”滚动视图。它没有像 iOS 9 和 10 那样弹回其原始位置,而是保持向下滚动,就好像插图大约是它们实际的 2 倍。

// Scroll View
myScrollView = UIScrollView()
myScrollView.contentInset = UIEdgeInsetsMake(scrollInsetHeight(), 0, 0, 0)
myScrollView.backgroundColor = barBackgroundColor
myScrollView.isUserInteractionEnabled = true
self.view.addSubview(myScrollView)
myScrollView.snp.makeConstraints 
    make in
    make.edges.equalTo(self.view)


// Content View
contentView = UIView()
contentView.isUserInteractionEnabled = true
myScrollView.addSubview(contentView)
contentView.snp.makeConstraints 
    make in
    make.edges.equalTo(myScrollView)
    make.width.equalTo(self.view)


// Label
let lbl = UILabel()
lbl.text = "..."

lbl.font = UIFont(name: "OpenSans", size: 17)
lbl.textColor = .white
lbl.numberOfLines = 0

contentView.addSubview(lbl)
lbl.snp.makeConstraints 
    make in
    make.top.equalToSuperview().inset(20)
    make.left.right.equalToSuperview().inset(20)


// Resize Content
contentView.snp.makeConstraints 
    make in
    make.bottom.equalTo(lbl.snp.bottom).offset(20)

【问题讨论】:

【参考方案1】:

使用新的 UIScrollViewContentInsetAdjustmentBehavior 进行相当简单的修复

if #available(iOS 11.0, *) 
    myScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never

【讨论】:

你拯救了我的一天!=) @SatnamSync 我可以建议选择更高级别的语言吗?您正在寻找的礼貌用语可能是“烦人”。 @Yunnosch 语言水平还可以。很抱歉,如果它以某种方式冒犯了你。

以上是关于iOS 11、状态栏、导航栏和 UIScrollview的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 中 UIActivityViewControllers 的模态状态栏和导航栏文本颜色

iOS导航栏和状态栏

iOS:状态栏和导航栏:空格或底层

为啥ios中的状态栏和导航栏背景颜色不同

iOS 8 -- 对导航栏和状态栏应用模糊

iOS获取状态栏和导航栏尺寸(宽度和高度)