【发布时间】:2013-04-08 22:44:43
【问题描述】:
我想在 UIViewController 视图中放置一个 UITextField,使用自动布局(动态调整大小和文本字段与其父视图之间的 5 pt 边距)。我使用 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 时,应用才会崩溃。如果我删除这两个调用,我可以避免崩溃,但是文本字段也不会显示。
【问题讨论】:
-
你得到了什么异常?
-
它在 AppDelegate 中显示 SIGABRT,行:“return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));”我在错误日志中找不到更具体的内容。
-
你在哪里创建文本字段?您是在代码中创建它,还是您在 IB 中创建的文本字段的 IBOutlet?如果我只是分配初始化一个文本字段作为代码的第一行,它不再崩溃(约束不能正常工作,但至少它不会崩溃)。
标签: ios objective-c uiviewcontroller autolayout