我想使用自动布局(动态调整大小和文本字段与其父视图之间的 5 pt 边距)将UITextField放置在UIViewController视图中。我使用loadView方法以编程方式创建视图。
UIViewController 的头部
@property (weak, nonatomic) UITextField *textField;
执行
-(void)loadView{
//Frame
UIView *frame = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
[self setView:frame];
[self.view setBackgroundColor:[UIColor redColor]];
//TextField
[self.textField setDelegate:self];
[self.textField setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.textField setBackgroundColor:[UIColor blueColor]];
[frame addSubview:self.textField];
[frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(5@50)-[textField(==10@10)]-(5@50)-|"
options:0
metrics:nil
views:@{@"textField" : self.textField}]];
[frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:|-(5@50)-[textField(==10@10)]-(5@50)-|"
options:0
metrics:nil
views:@{@"textField" : self.textField}]];
// //Test with UIView instead
// UIView *sub = [[UIView alloc]init];
// [sub setTranslatesAutoresizingMaskIntoConstraints:NO];
// [sub setBackgroundColor:[UIColor greenColor]];
// [frame addSubview:sub];
//
// [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(5@50)-[sub(==10@10)]-(5@50)-|"
// options:0
// metrics:nil
// views:@{@"sub" : sub}]];
//
// [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:|-(5@50)-[sub(==10@10)]-(5@50)-|"
// options:0
// metrics:nil
// views:@{@"sub" : sub}]];
运行它会引发异常。奇怪地使用 UIView (“sub”)作为子视图(注释掉的部分)确实按预期工作。
输出:
文本字段不应该像这个 UIView 一样吗?为什么 textField 会导致异常?
新发现:仅当我在self.textField上使用addConstraints时,应用程序才会崩溃。如果我删除这两个调用,我可以避免崩溃,但是文本字段也不会显示。