我想使用自动布局以编程方式将文本字段添加到滚动视图,但是添加文本字段时,它以正确的大小显示在左上角,但没有宽度(也许2像素)。我如何才能将文本字段限制为屏幕的宽度?
以下是我的viewDidLoad方法:
self.scrollView = [[UIScrollView alloc] init];
[self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.scrollView];
self.emailField = [[UITextField alloc] init];
[self.emailField setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.scrollView addSubview:self.emailField];
NSDictionary *views = @{ @"view":self.view, @"scrollView":self.scrollView, @"textField":self.emailField};
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"
options:0
metrics:nil
views:views]];
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
options:0
metrics:nil
views:views]];
[self.scrollView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[textField]|"
options:0
metrics:nil
views:views]];
[self.scrollView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textField(46)]"
options:0
metrics:nil
views:views]];
我使用了与您发布的代码相同的代码,并修改了一些约束并添加了一些约束。
UITextField *emailField = [[UITextField alloc] init];
emailField.backgroundColor = [UIColor lightGrayColor];
emailField.translatesAutoresizingMaskIntoConstraints = NO;
self.emailField = emailField;
UIScrollView *scrollView = [[UIScrollView alloc] init];
self.scrollView = scrollView;
[self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.scrollView];
NSDictionary *views = @{ @"view":self.view, @"scrollView":self.scrollView, @"textField":self.emailField, @"topLayoutGuide": self.topLayoutGuide};
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"
options:0
metrics:nil
views:views]];
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
options:0
metrics:nil
views:views]];
[self.emailField setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.scrollView addSubview:self.emailField];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.emailField
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:10]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.emailField
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:10]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.emailField attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:-20]];
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:[topLayoutGuide][textField(46)]"
options:0
metrics:nil
views:views]];
重要的约束是宽度约束,它与scrollView的边界有关。如果您未通过自动布局在scrollView中定义子视图的宽度,则scrollView的contentSize会模棱两可,因此无法正确确定内容的宽度。“ |” scrollView的自动布局格式是contentSize边缘。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句