我创建了多个自由形式的UIViewControllers,这些UIViewControllers具有用于滚动目的的超长高度,其宽度等于iPhone 8 Plus屏幕的宽度(因为这是我可以用来测试的物理设备)。
当我试图使我的应用程序在所有设备上运行至iPhone SE大小的屏幕时,都会出现问题。高度不是问题,但是宽度会造成问题,因为屏幕尺寸较小。
UIViewController显然比屏幕宽。因此,它允许水平滚动/平移。但是,我的目标是使ViewController匹配正在使用的屏幕的宽度。因此,只能进行垂直滚动。
我试图在显示UIViewController时调整其宽度,但这似乎没有效果。我真的不确定还有什么可以尝试的,并且在网上找不到任何东西。这是明显的解决方法还是我做的事情完全错误?
答案 0 :(得分:0)
我认为您可能会误将您的 UIViewController 与视图一起使用。如果您的视图是滚动视图,则可以将滚动视图的内容大小设置为与设备的宽度相同,这样就可以达到预期的效果。
在 Swift 3.0 及更高版本中:
let screenWidth = UIScreen.main.bounds.width
yourScrollView.contentSize.width = screenWidth
答案 1 :(得分:0)
要支持多种宽度,您可以使用iOS中可用的不同尺寸类别。 有许多针对尺寸类相关约束的教程。
像https://www.bignerdranch.com/blog/designing-for-size-classes-in-ios/一样, https://www.bignerdranch.com/blog/designing-for-size-classes-in-ios/
如果可能,对于您的设计,您必须提供View与其父视图有关的约束。
答案 2 :(得分:0)
我尝试调整UIViewController的宽度在显示时
“呈现”是指viewDidLoad
方法吗?我认为这不是调整宽度的最佳位置,因为目前尚不知道视图范围。旋转设备时,不会调用viewDidLoad
之外的方法。
我想您应该在viewDidLayoutSubviews
中更新滚动视图宽度,每次在视图控制器中更改根视图范围时都会调用该滚动视图宽度:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let screenWidth = UIScreen.main.bounds.width
yourScrollView.contentSize.width = screenWidth
// I don't think you really need it
// but it may help
yourScrollView.setNeedsLayout()
}
答案 3 :(得分:0)
要正确回答此问题以及可能会遇到此问题的其他人。
视图控制器的大小会自动调整为屏幕大小(前提是其配置正确)。
如果在视图控制器内部具有滚动视图,则应确保使用自动布局约束将滚动视图的边缘附加到其父视图(视图控制器的根视图)。
此外,必须将滚动视图的内容设置为将根视图用作位置参考(至少水平),否则自动布局将不知道如何处理水平定位。
要实现此目的,您只需将内部视图(填充整个滚动视图)附加到视图控制器的根视图的左右边缘。