调整UITextField的宽度以在横向上填充工具栏

UIToolbar ,我已经添加了一个UITextField到中间的栏(它被作为一个UIBarButtonItem添加)与旁边的另一个UIBarButtonItem (动作button)。 我在左边和右边添加了灵活的空格键button项目。 它在纵向上看起来不错,但是当我旋转到横向时,它将它们居中并看起来不错,但是我需要拉伸文本字段来填充宽度,并将最后一个button清除到右侧 – 完全像在Messages中一样iPhone和iPad。

我认为自动布局会做的伎俩,但苹果声明,你不能创buildUIBarButtonItem的约束。 实际上,当我select任何栏button或文本字段时,将不允许创build任何约束。

你能让我知道如何做到这一点? 谢谢!

在这里输入图像说明

编辑:我已经尝试了一些固定/灵活的空间的其他组合。 当我不添加任何时,文本字段和分享button被推到左边:
在这里输入图像说明

如果相反,我做固定的空间,它看起来是完全相同的如上0宽度,或者如果我设置一个宽度,那么它显然会推它们。 最右边的最后一个空间没有任何影响 – 它不是固定在最右边,所以它离开了屏幕。

我试了左边的一个固定的空间,右边是一个固定的空间,中间的空间固定(或者没有中间的空间),看起来像上面的截图。 然后我改变了中间的一个灵活,结果是这样的:
在这里输入图像说明

如果我把第一个变为灵活的,中间没有(或者如果我添加一个固定的),然后在右侧移动,它会移到右侧:
在这里输入图像说明

如果第一个是灵活的,中间是灵活的,右边是固定的,这是它的外观:
在这里输入图像说明

在所有情况下,文本字段的宽度与最初在故事板中设置的静态值保持相同。 我认为问题是,当您通过拖动框架来设置宽度时,没有蓝色的指引来捕捉,所以它将始终保持相同的宽度。

我错过任何空间组合吗? 如果我不能在界面生成器中实现所需的行为,那么如何在代码中完成此操作?

要获得一个水平伸展的文本字段,我不得不手动设置它的frameviewWillAppear和方向改变时 – 我使用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) { }]; 

以前的解决scheme(在最新的操作系统中不再适用于我):

添加这个viewDidLoad

 self.textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

在这里输入图像说明