iPhone X上UIScrollView左侧的不需要的空白区域

时间:2017-10-22 23:49:17

标签: ios uiscrollview background-color iphone-x safearealayoutguide

UIScrollView在除iPhone X之外的所有iPad或iPhone上没有左侧空白区域时工作正常。如何删除空格?

我使用故事板。弹出滚动/缩放全部被禁用。除iPhone X外,iPad或iPhone上没有空白区域。我认为它可能与安全区域有关。

enter image description here

4 个答案:

答案 0 :(得分:7)

此间距来自安全区域,安全区域应用于UIScrollview的左/右,因为iPhone X上的内容以横向方式插入,可以使用只读属性UIScrollview.safeAreaInsets查看。

以下行可用于在您不需要时删除安全区域插入内容:

UIScrollview.contentInsetAdjustmentBehavior = .never

默认值为UIScrollViewContentInsetAdjustmentBehavior.automatic包括安全区域布局指南边距作为内容插入。

注意:自动布局约束与insets无关,它只是iOS 11 UIScrollview内容插入调整行为。

答案 1 :(得分:4)

设置相对于safeArea的约束是iPhone-X的好习惯。 这就是苹果所说的 -

  

当视图在屏幕上可见时,本指南反映了该部分   导航栏,标签栏,工具栏未覆盖的视图,   和其他祖先观点。

在您的情况下,您正在提供约束leading& trailing scrollView safeArea superViewsuperview

因此,如果您对safeArea而不是Message.Type msgType = in.type(); // All messages have the frame length, message type, and message itself. int headerLength = 8 + msgType.encodedLength() + in.encodedLength(); // long frameLength = headerLength + bodyLength; ByteBuf header = ctx.alloc().heapBuffer(headerLength); //header.writeLong(frameLength); header.writeLong(headerLength); msgType.encode(header); in.encode(header); 采取风险约束,您的对象内容可能会被剪裁,特别是当您向左旋转时,最左侧的内容将剪切在iPhone-X的顶层。

enter image description here

Apple doc for safeAreaLayoutGuide

答案 2 :(得分:1)

嗯,我以非优雅的方式解决了这个问题。但它就像一个魅力。 (我尝试了所有其他答案。感谢您的帮助,但这些答案在我的案例中似乎不起作用。)

var leftMargin: CGFloat = 0
var rightMargin: CGFloat = 0

if Device.isPhone() && Device.IS_5_8_INCHES() {
    self.leftMargin = 44
    self.rightMargin = 44
}

let frame = CGRect(
    x: (self.view.frame.width - self.leftMargin - self.rightMargin) * CGFloat(pageIndex),
    y: ...
)

答案 3 :(得分:-1)

Safe Area Layout负责此空格。

第一个选项:
忽略滚动视图的安全区域布局,并根据超视图(或主视图)设置scrollview的约束。滚动时,Scrollview会自动处理内容的安全区域插入。

景观视图:

enter image description here

纵向视图:

enter image description here


第二选项:
我不建议删除/更改滚动视图的安全区域布局以及可解决空白区域可见性问题的备用解决方案:

  • 将蓝色背景颜色(已应用于滚动视图)设置为视图控制器的主视图,如果滚动视图覆盖整个屏幕
  • 为滚动视图设置清晰的颜色背景

viewDidLoad

中添加此代码
@ IBOutlet var scrollView: UIScrollView!

override func viewDidLoad(){
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.yellow // set here blue color that you've applied for your scroll view 

    self.scrollView.backgroundColor = UIColor.clear 
}

enter image description here

以下是有关安全区域布局的良好参考答案,以便更好地理解: