【问题标题】:Xcode 6 auto layout flexible widthXcode 6 自动布局灵活宽度
【发布时间】:2014-10-28 17:17:40
【问题描述】:

我有一个 UITextField,它使用 Xcode 6s 自动布局界面,我已将其宽度设置为 400 点。这在大屏幕设备上看起来不错,但在 iPhone 5s 上,这些框会从包含视图中消失。解决这个问题的正确方法是什么?

有没有办法设置一个约束,如果屏幕比这个大,UITextFields 宽度为 400 点,如果不是,则只填充容器视图,而不是溢出视图之外,或者我应该使用尺寸类将 UITextField 设置为与紧凑视图上的父视图具有相同的宽度。

【问题讨论】:

    标签: ios autolayout xcode6


    【解决方案1】:

    不要在 UITextField 上设置宽度约束,而是在其左右添加水平空间约束。这样 UITextField 会随着屏幕自动调整大小。

    【讨论】:

    • 我唯一遇到的问题是对于像 iPad 这样的大屏幕设备,我不希望文本视图占据全屏,因为它看起来很傻。
    • 苹果推荐的方法是为 iphone 和 ipad 使用不同的 storyboards/xibs。他们的代码将完全共享。
    • @KrisJurgowski 似乎 Apple 想要推动我们将 Storyboard 文件与每个大小类的不同实现相结合。我不确定我是否在乎这种工具/方法,但它似乎是未来的潮流。不过,我希望它们可以更轻松地区分设备/屏幕。现在,将 iPhone 与 iPad 区分开来相当容易,但将 iPhone 4S 与 iPhone 6 Plus 区分开来却令人困惑(至少在纵向模式下)。目前,我与您讨论单独的 Storyboard,但我认为支持的时间不会更长。
    • 有效,谢谢,我想知道,为什么需要添加水平空间约束?我觉得左右约束就够了。
    【解决方案2】:

    正如 Kris 所说,设置水平空间约束是解决此问题的好方法。

    针对您关于不想要恒定“边距”的评论,您可以执行以下操作:

    1. 在 Interface Builder 中设置水平空间约束。
    2. 在您的类中创建NSLayoutConstraint 类型的IBOutlets(.h 或.m;没关系)。
    3. IBOutlets 连接到相应的NSLayoutConstraints。
    4. 在您的视图生命周期方法之一 (viewDidLoad/viewWillAppear:) 中,将约束设置为您想要的值。

    听起来您主要是想防止该字段在 iPad 上跨越整个屏幕,因此您可以执行以下操作(假设 NSLayoutConstraints 被命名为“textFieldLeft”,而 UITextField 被命名为“textFieldRight”@ “文本字段”):

    - (void)viewDidLoad {
        if (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad) {
            self.textFieldLeft.constant = 50.0f;
            self.textFieldRight.constant = 50.0f;
            [self.textField layoutIfNeeded];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多