0

我想使用自动布局(动态调整大小和文本字段与其父视图之间的 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 自动布局

文本字段不应该像这个 UIView 一样吗?为什么 textField 会导致异常?


新发现:仅当我在self.textField上使用addConstraints时,应用程序才会崩溃。如果我删除这两个调用,我可以避免崩溃,但是文本字段也不会显示。

4

1 回答 1

-1

NSLayoutConstraint 只是 IOS 6 的一部分。如果您尝试使用 IOS6 以外的代码(例如 IOS 5、IOS 4.3),您很可能会遇到此运行时错误。

于 2013-04-08T22:54:32.787 回答