Отрегулируйте ширину UITextField для заполнения панели инструментов в ландшафте

на UIToolbar, Я добавил UITextField к середине бара (который добавляется как UIBarButtonItem) С другой UIBarButtonItem (кнопка действия) рядом с ним. Я добавил гибкие элементы кнопки пробела слева и справа. Он отлично смотрится на портрете, но когда я поворачиваюсь к пейзажу, он центрирует их и выглядит нормально, но мне нужно растянуть текстовое поле, чтобы заполнить ширину и нажать последнюю кнопку справа-точно так же, как в сообщениях-на iPhone и устройство iPad.

Я думал, что Auto Layout сделает трюк, но Apple заявляет, что вы не можете создавать ограничения для UIBarButtonItems. И действительно, когда я выбираю любую из кнопок панели или текстовое поле, это не позволит создавать какие-либо ограничения.

не могли бы вы сообщить мне, как это сделать? Спасибо!

enter image description here

EDIT: я пробовал несколько других комбинаций с фиксированными / гибкими пространствами. Когда я не добавляю их, текстовое поле и кнопка share нажимаются слева:
enter image description here

если вместо этого я делаю фиксированные пробелы, он выглядит точно так же, как и выше, с шириной 0, или если я установлю ширину, то он, очевидно, будет толкать их. Это последнее пространство в крайнем правом углу не имеет никакого эффекта - оно не зафиксировано на дальней правой стороне, поэтому оно уходит с экрана.

я попробовал фиксированное пространство слева и гибкое справа, со средним фиксированным (или без среднего), и это похоже на скриншот выше. Затем я изменил средний к гибкому и получилось так:
enter image description here

если я изменяю первый на гибкий, ни в середине (или если я добавляю фиксированный), и flxed справа, он перемещается вправо:
enter image description here

если первый гибкий, средний гибкий, а правый фиксированный, вот как это выглядит:
enter image description here

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

я пропустил какую-либо комбинацию пробелов? Если я не могу реализовать желаемое поведение в построителе интерфейса, как это можно сделать в коде?

1 ответов


получить растяжение по горизонтали текстовое поле, мне пришлось вручную установить frame на viewWillAppear, а также при изменении ориентации - я использовал viewWillTransitionToSize:withTransitionCoordinator::

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  __nonnull context) {
    self.textField.frame = CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width - self.actionButton.width - 55, self.inputTextField.frame.size.height);
} completion:^(id<UIViewControllerTransitionCoordinatorContext>  __nonnull context) {
}];


Предыдущее решение (больше не работает для меня в последних ОС):

добавить в viewDidLoad:

self.textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;

enter image description here