2014-12-06 66 views
0

我想使用自动布局以编程方式将滚动视图添加到滚动视图中,但添加文本字段时,它将显示在左上角,其大小正确但它没有宽度(可能是2个像素)。我怎样才能让文本域被限制到屏幕的宽度?如何使用自动布局以编程方式将uiTextfield添加到滚动视图

以下是我的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]]; 
+0

spuggy,你尝试插入self.emailField到您的意见字典之前,你启动它?它不会导致异常吗? – 2014-12-06 08:55:03

+0

如果此代码运行并且不显示电子邮件字段,原因是您正在为您的scrollView创建一个模糊的可滚动contentSize。为内容明确定义宽度,然后您将看到它。 – Sandeep 2014-12-06 08:59:48

+0

Mike.R谢谢我编辑了我的问题,但那只是一个复制粘贴错误 – grabury 2014-12-06 09:00:43

回答

3

我用您发布和修改一些限制并添加了一些相同的代码。

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边缘。

相关问题