2014-10-28 3 views
2

У меня есть UITextField, который использует интерфейс автоматической компоновки Xcode 6s, который я установил, чтобы иметь ширину 400 точек. Это выглядит отлично на больших экранных устройствах, но на iPhone 5 эти поля исчезают из содержащего представления. Каков правильный подход к этому?Xcode 6 auto layout гибкая ширина

Есть ли способ установить ограничение, которое сделает UITextFields шириной 400 точек, если экран больше этого или просто заполнить представление контейнера, если нет, вместо того, чтобы переполняться за пределы представления или я должен использовать размер классы, чтобы установить UITextField равными ширинами в своем родительском представлении на компактных представлениях.

ответ

2

Вместо установки ограничения ширины на UITextField добавьте ограничения горизонтального пробела влево и вправо от него. Таким образом, UITextField будет автоматически изменяться с экрана.

+0

Единственная проблема, с которой я сталкиваюсь, - это устройства с большим экраном, такие как iPads. Я не хочу, чтобы текстовый вид занимал весь экран, поскольку он будет выглядеть глупо. –

+0

Рекомендованный подход Apple должен иметь разные раскадровки/xibs для iphone и ipad. Они будут полностью разделены. –

+0

@KrisJurgowski Кажется, что Apple хочет подтолкнуть нас к объединенным файлам Storyboard с различными реализациями в классе размера. Я не уверен, что пока мне не нужен этот инструмент/подход, но, похоже, это волна будущего. Надеюсь, они упрощают дифференциацию устройств/экранов. Сейчас довольно просто отличить iPhone от iPad, но дифференциация iPhone 4S от iPhone 6 Plus сбивает с толку (по крайней мере, в портретном режиме). На данный момент я с вами об отдельных Storyboards, но я не думаю, что это будет поддерживаться очень долго. – mbm29414

0

Как и то, что сказал Крис, установка горизонтальных ограничений пространства - отличный способ начать работу по этой проблеме.

В ответ на ваш комментарий о не желая постоянные «поля», вы можете сделать следующее:

  1. Выставьте Горизонтальные ограничения пространства, в Interface Builder.
  2. Создайте IBOutlet s типа NSLayoutConstraint в своем классе (либо .h, либо .m; это не имеет значения).
  3. Подключите IBOutlet s к соответствующим NSLayoutConstraint s.
  4. В одном из ваших методов жизненного цикла (viewDidLoad/viewWillAppear:) установите ограничения на нужные значения.

Это звучит, как вы в основном хотят, чтобы предотвратить поле от охватывающих весь экран на IPad, так что вы могли бы сделать что-то вроде этого (предположим NSLayoutConstraint s называются «textFieldLeft» и «textFieldRight» для UITextField имени " textField "):

- (void)viewDidLoad { 
    if (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad) { 
     self.textFieldLeft.constant = 50.0f; 
     self.textFieldRight.constant = 50.0f; 
     [self.textField layoutIfNeeded]; 
    } 
} 
Смежные вопросы