自动布局 UITextField 以适应 UINavigationBar
Posted
技术标签:
【中文标题】自动布局 UITextField 以适应 UINavigationBar【英文标题】:AutoLayout UITextField to fit UINavigationBar 【发布时间】:2014-09-15 21:31:01 【问题描述】:我一直在尝试调整 UITextField 的大小以适应并延伸到整个 UINavigationBar,但没有成功。我知道这是世界上最简单的问题,但我没有注意到。
【问题讨论】:
【参考方案1】:这不是世界上最简单的问题。其实挺麻烦的。
你不能使用约束来做到这一点。 UINavigationBar
负责布置其子视图。 Xcode 知道这一点,因此它不允许您在文本字段上设置约束。
导航栏通过发送sizeThatFits:
询问您的文本字段想要多大,并提供最大允许大小,因此一种方法是创建UITextField
的子类以返回该最大值。这有效:
@implementation MyTextField
- (CGSize)sizeThatFits:(CGSize)size
return size;
@end
另一种方法是使文本字段非常宽,并让导航栏缩小以适应。您需要在旋转时重置宽度,因为导航栏一旦缩小就不会再次拉伸文本字段。在您的视图控制器中创建一个连接到文本字段的插座,并在布局之前更新宽度。这有效:
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UITextField *textField;
@end
@implementation ViewController
- (void)viewWillLayoutSubviews
[super viewWillLayoutSubviews];
[self widenTextField];
- (void)widenTextField
CGRect frame = self.textField.frame;
frame.size.width = 10000;
self.textField.frame = frame;
@end
【讨论】:
你知道我如何在 Swift 中做到这一点吗? 照我做的。没有什么棘手或微妙的事情发生。【参考方案2】:Swift 4 版本
class ViewController: UIViewController
@IBOutlet var textField: UITextField!
override func viewWillLayoutSubviews()
super.viewWillLayoutSubviews()
widenTextField()
func widenTextField()
var frame: CGRect? = textField?.frame
frame?.size.width = 10000
textField?.frame = frame!
【讨论】:
以上是关于自动布局 UITextField 以适应 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 以编程方式在具有自动布局的 UITextField 内定位 UIImageView