【问题标题】:How to build responsive layout in Xcode (not auto layout)?如何在 Xcode 中构建响应式布局(不是自动布局)?
【发布时间】:2018-01-23 14:29:06
【问题描述】:

我正在制作聊天应用程序并创建了角色组件,该组件使用Container view 在视图中实现。我希望它具有最大宽度,因此在 iPhone 上它将是全宽的,但在 iPad 上以固定宽度居中。同样在横向的 iPhone 上,它应该是可滚动的(我已经使用了Scroll view,但在横向上它的行为很奇怪)。

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

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

【问题讨论】:

    标签: ios swift xcode layout constraints


    【解决方案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
        }
    ...
    }
    

    【讨论】:

    • 如果要创建不同的故事板,如何将其实现到现有的故事板并根据设备进行切换?
    • 那么可滚动的容器视图呢?没有滚动视图,它根本不能滚动,但使用它没有任何变化,只会出现反弹效果
    • 要修复你的滚动视图,你应该问一个不同的问题,因为这与这个问题无关,你可能有有缺陷的约束。
    • 只会在应用启动时发生吗?如果是,那么我需要绝对有两个独立的故事板吗?有没有办法使用一个故事板,但对于某些视图切换它?
    • 关于滚动视图的答案,我认为这两个问题都是因为约束,因为我读到要设置视图的最大宽度,我可以设置宽度和边距的约束。滚动问题是由于限制造成的
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多