14

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

我使用故事板。Bounce On Scroll/Zoom 都被禁用。除了 iPhone X,iPad 或 iPhone 上没有空白。我认为这可能与安全区域有关。

在此处输入图像描述

4

4 回答 4

30

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

当您不需要时,可以使用以下行来摆脱安全区域插图:

UIScrollview.contentInsetAdjustmentBehavior = .never

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

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

于 2018-02-03T21:23:33.377 回答
5

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

当视图在屏幕上可见时,本指南反映了导航栏、选项卡栏、工具栏和其他祖先视图未覆盖的视图部分。

在您的情况下,您给出了约束leading& trailingof scrollViewwith safeArea, NotsuperView

因此,如果您冒险限制superview而不是safeArea您的对象内容可能会被剪切,特别是当您向左旋转时,最左边的内容将被剪切到 iPhone-X 的顶部。

在此处输入图像描述

用于 safeAreaLayoutGuide 的 Apple 文档

于 2017-10-23T04:18:44.340 回答
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: ...
)
于 2018-02-11T22:57:09.920 回答
-1

安全区域布局负责这个空白区域。

第一个选项:
忽略滚动视图的安全区域布局并设置滚动视图相对于其超级视图(或主视图)的约束。滚动视图在滚动时自动处理内容的安全区域插入。

横向视图:

在此处输入图像描述

纵向视图:

在此处输入图像描述


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

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

将此代码添加到您的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 
}

在此处输入图像描述

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

于 2017-10-23T04:30:21.243 回答