如何在Xcode中构建响应式布局(不是自动布局)?

时间:2017-08-15 16:00:25

标签: ios swift xcode layout constraints

我正在制作聊天应用,并创建了使用Container view在视图中实现的角色组件。我希望它有最大宽度,所以在iPhone上它将是全宽但在iPad中心有固定宽度。同样在横向iPhone上它应该是可滚动的(我已经使用Scroll view但是在横向方向上它表现得非常奇怪)。

Create persona component

这就是创建角色组件的样子。它包含View中的所有元素,但Xcode告诉它们是错误。现在它将所有元素分开,它们的宽度<= 350,并且尾随和前导边距> = 0 - 所有这一切都很好但是当我在视图中插入这个组件时(它看起来像这样):

It looks like this

...使用Container view包裹着Scroll view,它表现得非常奇怪。我在顶部,底部,左侧和右侧的Container view约束都等于0,但Xcode显示警告y不等于预期。它不能使Container viewScroll view一样大。另外我想让它可滚动,所以当屏幕高度不足以显示整个表格时,你可以滚动它。但是现在当您将屏幕旋转到横向视图时,Container view的大小也会发生变化,因此Scroll view不可滚动。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在Storyboard中执行此操作,方法是根据屏幕大小选择要自定义的元素的Attributes inspector,然后点击属性左侧的+符号你想自定义。但是,这只提供了非常有限的选项,因此您最好在代码中以编程方式检查屏幕大小,或者对iPad和iPhone使用不同的Storyboards

要使用不同的故事板,您可以执行以下操作:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let screenWidth = UIScreen.main.bounds.width
    let orientation = UIDevice.current.orientation

    if screenWidth > x { //use iPad storyboard
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "identifier")
        self.window.rootViewController = vc
    } else {
                    let storyboard = UIStoryboard(name: "OtherStoryboard", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "otherIdentifier")
        self.window.rootViewController = vc
    }
...
}