UIScrollView
在除 iPhone X 之外的所有 iPad 或 iPhone 上没有左侧空白区域的情况下工作正常。如何删除空白区域?
我使用故事板。Bounce On Scroll/Zoom 都被禁用。除了 iPhone X,iPad 或 iPhone 上没有空白。我认为这可能与安全区域有关。
UIScrollView
在除 iPhone X 之外的所有 iPad 或 iPhone 上没有左侧空白区域的情况下工作正常。如何删除空白区域?
我使用故事板。Bounce On Scroll/Zoom 都被禁用。除了 iPhone X,iPad 或 iPhone 上没有空白。我认为这可能与安全区域有关。
这个间距来自安全区域,它应用于 UIScrollview 的左/右,作为 iPhone X 上横向的内容插入,可以使用只读属性查看UIScrollview.safeAreaInsets
。
当您不需要时,可以使用以下行来摆脱安全区域插图:
UIScrollview.contentInsetAdjustmentBehavior = .never
默认值UIScrollViewContentInsetAdjustmentBehavior.automatic
包括安全区域布局指南边距作为内容插图。
注意:自动布局约束与 insets 无关,它只是 iOS 11 UIScrollview 内容 insets 调整行为。
设置相对于的约束safeArea
是 iPhone-X 的好习惯。苹果是这样说的——
当视图在屏幕上可见时,本指南反映了导航栏、选项卡栏、工具栏和其他祖先视图未覆盖的视图部分。
在您的情况下,您给出了约束leading
& trailing
of scrollView
with safeArea
, NotsuperView
因此,如果您冒险限制superview
而不是safeArea
您的对象内容可能会被剪切,特别是当您向左旋转时,最左边的内容将被剪切到 iPhone-X 的顶部。
好吧,我以非优雅的方式解决了这个问题。但它就像一个魅力。(我尝试了所有其他答案。感谢您的帮助,但是这些答案似乎不适用于我的情况。)
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: ...
)
安全区域布局负责这个空白区域。
第一个选项:
忽略滚动视图的安全区域布局并设置滚动视图相对于其超级视图(或主视图)的约束。滚动视图在滚动时自动处理内容的安全区域插入。
横向视图:
纵向视图:
第二个选项:
我不建议为您的滚动视图删除/更改安全区域布局以及可以解决空白可见性问题的替代解决方案:
将此代码添加到您的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
}
以下是有关安全区域布局的良好参考答案,以便更好地理解: