AutoLayout UITextField适合UINavigationBar

Mat*_*ift 3 constraints frame ios autolayout swift

我一直试图调整UITextField的大小以适应和延伸整个UINavigationBar,但一直没有成功.我知道这是世界上最简单的问题,但我没有注意到.感谢您的帮助,我很感激.

在此输入图像描述

rob*_*off 8

这不是世界上最简单的问题.事实上,这是相当棘手的.

你不能使用约束来做到这一点. UINavigationBar负责布置其子视图.Xcode知道这一点,所以它不允许你在文本字段上设置约束.

导航栏会通过发送文本字段询问文本字段的sizeThatFits:大小,并提供允许的最大大小,因此一种方法是创建一个UITextField返回该最大值的子类.这有效:

@implementation MyTextField

- (CGSize)sizeThatFits:(CGSize)size {
    return size;
}

@end
Run Code Online (Sandbox Code Playgroud)

另一种方法是使文本字段非常宽,让导航栏缩小它以适应.您需要在旋转时重置宽度,因为导航栏一旦收缩就不会再拉伸文本字段.在视图控制器中创建连接到文本字段的插座,并在布局之前更新宽度.这有效:

@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
Run Code Online (Sandbox Code Playgroud)