2014-10-28 84 views
2

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

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

回答

2

而不是在UITextField上设置宽度约束,将水平空间约束添加到它的左侧和右侧。这样,UITextField将自动调整屏幕大小。

+0

我唯一的问题是,像iPad这样的大屏幕设备我不希望文本视图占用整个屏幕,因为它看起来很傻。 – 2014-10-28 17:51:30

+0

苹果推荐的方法是为iphone和ipad制作不同的storyboard/xibs。他们的代码将被完全共享。 – 2014-10-28 17:52:44

+0

@KrisJurgowski看起来Apple似乎希望将每个尺寸类别的Storyboard文件与不同的实现结合起来。我不确定我是否还在意这种工具/方法,但似乎是未来的潮流。不过,我希望他们能够更轻松地区分设备/屏幕。目前,将iPhone与iPad区分开来相当容易,但将iPhone 4S与iPhone 6 Plus区分开来会造成混淆(至少在肖像模式下)。现在,我与您分开介绍Storyboard,但我认为这不会被支持的时间更长。 – mbm29414 2014-10-28 17:59:23

0

就像Kris说的那样,设置水平空间约束是开始处理这个问题的好方法。

在回答你关于不想常量“利润”的评论,你可以做到以下几点:

  1. 建立横向空间限制在Interface Builder。
  2. 在您的班级中创建IBOutlet s类型NSLayoutConstraint(无论是.h还是.m;无关紧要)。
  3. IBOutlet连接到各自的NSLayoutConstraint s。
  4. 在其中一种视图生命周期方法(viewDidLoad/viewWillAppear:)中,将约束设置为所需的值。

这听起来像你主要是想防止跨越整个屏幕在iPad领域,所以你可以做这样的事情(假设NSLayoutConstraint s的名为“textFieldLeft”和“textFieldRight”名为UITextField“文本字段“):

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