ios - 调整 UITextField 的宽度以填充横向工具栏

标签 ios uitextfield autolayout uibarbuttonitem uitoolbar

UIToolbar 中,我添加了一个 UITextField 到栏的中间(作为 UIBarButtonItem 添加)和另一个 UIBarButtonItem(操作按钮)旁边。我在最左边和最右边添加了灵活的空格键按钮项。它在纵向上看起来很棒,但是当我旋转到横向时,它们会居中并且看起来不错,但是我需要拉伸(stretch)文本字段以填充宽度并将最后一个按钮向右清除 - 就像它在消息中一样 - 打开iPhone 和 iPad。

我认为自动布局可以解决问题,但 Apple 声明您不能为 UIBarButtonItem 创建约束。事实上,当我选择任何栏按钮或文本字段时,它不允许创建任何约束。

你能告诉我如何完成这个吗?谢谢!

enter image description here

编辑:我尝试了其他一些固定/灵活空间的组合。当我不添加任何内容时,文本字段和共享按钮被推到左侧:
enter image description here

如果我改为固定空格,它看起来与上面完全相同,宽度为 0,或者如果我设置宽度,那么它显然会将它们推过。最右边的最后一个空格没有效果 - 它没有固定在最右边,所以它离开了屏幕。

我试过左边一个固定空格,右边一个弹性空格,中间一个固定(或者没有中间一个),看起来像上面的截图。然后我把中间的改成灵活的,结果是这样的:
enter image description here

如果我将第一个更改为灵活的,中间没有(或者如果我添加一个固定的),并在右侧使用 flxed,它会移到右侧:
enter image description here

如果 first 是灵活的,middle 是灵活的,right 是固定的,这就是它的样子:
enter image description here

在所有情况下,文本字段的宽度都保持与 Storyboard中最初设置的静态值相同。我认为问题在于,当您通过拖动框架来设置宽度时,没有可捕捉到的蓝色引用线,因此它始终保持相同的宽度。

我是否遗漏了任何空格组合?如果我无法在界面构建器中实现所需的行为,如何在代码中实现这一点?

最佳答案

要获得水平拉伸(stretch)的文本字段,我必须在 viewWillAppear 中手动设置它的 frame 并且当方向发生变化时 - 我使用了 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

关于ios - 调整 UITextField 的宽度以填充横向工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903527/

相关文章:

ios - 循环动画 - 不进行

ios - 在其他 UIPageViewController 中执行 segue

ios - UITextField 上的 Swift 扩展不会在 swift 1.2 和 xcode6.3 上编译

ios - Swift 无法将类型 'CGPath' 的值分配给类型 'CGPath?' 的值

ios7 - 是否可以在 iOS 7 自定义过渡中为约束设置动画

ios - 如何快速计算 UInt16 值数组的总和?

ios - 从另一个 ViewController 调用函数发现错误

ios - swift 中相同的 textField 函数

ios - 使用 AutoLayout 缩放 UIImageView 以适应宽度

ios - 加载时 UITextView 未滚动到顶部