iPhone X 上 UIScrollView 左侧不需要的白色 space
Unwanted white space on left of UIScrollView on iPhone X
UIScrollView
在所有 iPad 或 iPhone 左侧没有白色 space 的情况下工作正常,除了 iPhone X。我怎么能删除白色 space?
我使用故事板。 Bounce On Scroll/Zoom 全部禁用。除了 iPhone X,iPad 或 iPhone 上没有白色 space。我认为这可能与安全区有关。
相对于 safeArea
设置约束是 iPhone-X 的好习惯。
苹果是这样说的-
When the view is visible onscreen, this guide reflects the portion of
the view that is not covered by navigation bars, tab bars, toolbars,
and other ancestor views.
在你的情况下,你给出的约束条件是 scrollView
的 leading
& trailing
和 safeArea
,而不是 superView
因此,如果您冒险对 superview
而不是 safeArea
施加约束,您的对象内容可能会被剪裁,特别是当您向左旋转时,最左边的内容将剪裁在 iPhone-X.
Safe Area Layout负责这个白space.
第一个选项:
忽略滚动视图的安全区域布局并设置滚动视图相对于其超级视图(或主视图)的约束。 Scrollview 在滚动时自动处理内容的安全区域插入。
横向视图:
纵向视图:
第二个选项:
我不建议 remove/change 滚动视图的安全区域布局和可以解决白色 space 可见性问题的替代解决方案:
- 如果滚动视图覆盖整个屏幕,请将蓝色背景颜色(您已为滚动视图应用的颜色)设置到视图控制器的主视图中 =]
- 为滚动视图设置清晰的彩色背景
将此代码添加到您的 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
}
这里有关于安全区域布局的很好的参考答案,以便更好地理解:
此间距来自安全区域,应用于 left/right 的 UIScrollview 作为 iPhone X 横向内容插入,可以使用只读 属性 查看UIScrollview.safeAreaInsets
.
当您不需要时,可以使用以下行来摆脱安全区域插入:
UIScrollview.contentInsetAdjustmentBehavior = .never
默认值 UIScrollViewContentInsetAdjustmentBehavior.automatic
包括安全区域布局指南边距作为内容插图。
注意:自动布局约束与 insets 无关,它只是 iOS 11 UIScrollview content insets 调整行为。
好吧,我用非优雅的方式解决了这个问题。但它就像一个魅力。 (我尝试了所有其他答案。感谢您的帮助,但这些答案似乎对我不起作用。)
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: ...
)
UIScrollView
在所有 iPad 或 iPhone 左侧没有白色 space 的情况下工作正常,除了 iPhone X。我怎么能删除白色 space?
我使用故事板。 Bounce On Scroll/Zoom 全部禁用。除了 iPhone X,iPad 或 iPhone 上没有白色 space。我认为这可能与安全区有关。
相对于 safeArea
设置约束是 iPhone-X 的好习惯。
苹果是这样说的-
When the view is visible onscreen, this guide reflects the portion of the view that is not covered by navigation bars, tab bars, toolbars, and other ancestor views.
在你的情况下,你给出的约束条件是 scrollView
的 leading
& trailing
和 safeArea
,而不是 superView
因此,如果您冒险对 superview
而不是 safeArea
施加约束,您的对象内容可能会被剪裁,特别是当您向左旋转时,最左边的内容将剪裁在 iPhone-X.
Safe Area Layout负责这个白space.
第一个选项:
忽略滚动视图的安全区域布局并设置滚动视图相对于其超级视图(或主视图)的约束。 Scrollview 在滚动时自动处理内容的安全区域插入。
横向视图:
纵向视图:
第二个选项:
我不建议 remove/change 滚动视图的安全区域布局和可以解决白色 space 可见性问题的替代解决方案:
- 如果滚动视图覆盖整个屏幕,请将蓝色背景颜色(您已为滚动视图应用的颜色)设置到视图控制器的主视图中 =]
- 为滚动视图设置清晰的彩色背景
将此代码添加到您的 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
}
这里有关于安全区域布局的很好的参考答案,以便更好地理解:
此间距来自安全区域,应用于 left/right 的 UIScrollview 作为 iPhone X 横向内容插入,可以使用只读 属性 查看UIScrollview.safeAreaInsets
.
当您不需要时,可以使用以下行来摆脱安全区域插入:
UIScrollview.contentInsetAdjustmentBehavior = .never
默认值 UIScrollViewContentInsetAdjustmentBehavior.automatic
包括安全区域布局指南边距作为内容插图。
注意:自动布局约束与 insets 无关,它只是 iOS 11 UIScrollview content insets 调整行为。
好吧,我用非优雅的方式解决了这个问题。但它就像一个魅力。 (我尝试了所有其他答案。感谢您的帮助,但这些答案似乎对我不起作用。)
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: ...
)