【问题标题】:set auto layout programmatically in centre of the view iOS在 iOS 视图的中心以编程方式设置自动布局
【发布时间】:2015-11-23 23:47:01
【问题描述】:

我是 iOS 新手,对整个屏幕使用模糊效果视图,并希望以编程方式为视图中心的文本字段设置自动布局,我的代码是:

UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[blurEffectView setFrame:self.view.bounds];
[self.view addSubview:blurEffectView];

// Vibrancy effect
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.view.bounds];

UITextField *EmailTextField = [[UITextField alloc] init;
vibrancyEffectView.translatesAutoresizingMaskIntoConstraints = NO;
NSArray *heightConstraint = [NSLayoutConstraint      constraintsWithVisualFormat:@"V:[EmailTextField(30)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(EmailTextField)];
NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[EmailTextField(240)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(EmailTextField)];
NSArray *xConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-42-[EmailTextField(240)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(EmailTextField)];
NSArray *yConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:-150-[EmailTextField(30)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(EmailTextField)];
EmailTextField.textColor = [UIColor redColor];
EmailTextField.font = [UIFont fontWithName:@"Helvetica" size:16];
EmailTextField.backgroundColor=[UIColor clearColor];
EmailTextField.borderStyle = UITextBorderStyleRoundedRect;
[EmailTextField.layer setCornerRadius:10.0f];
EmailTextField.layer.borderWidth = 1.0;
EmailTextField.layer.borderColor = [UIColor whiteColor].CGColor;
EmailTextField.placeholder=@"Email ID";
EmailTextField.textAlignment= NSTextAlignmentCenter;
[[vibrancyEffectView contentView] addSubview:EmailTextField];
[[blurEffectView contentView] addSubview:vibrancyEffectView];
[vibrancyEffectView addConstraints:widthConstraint];
[vibrancyEffectView addConstraints:heightConstraint];
[vibrancyEffectView addConstraints:xConstraint];
[vibrancyEffectView addConstraints:yConstraint];

但给出错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析约束格式: 无法解释“|”字符,因为相关视图没有超级视图 H:|-42-[EmailTextField(240)]

我想要两个解决方案- 1.请更正文本字段相同x=42,y=150位置的代码 2.视图中心的Texfield。

如果有人可以帮助我提供正确的代码,请提前感谢

【问题讨论】:

    标签: ios iphone ios6 autolayout


    【解决方案1】:

    EmailTextField.center = CGPointMake( self.view.bounds.size.width / 2, your Y); 使用这个

    【讨论】:

      【解决方案2】:

      您必须先将视图添加到超级视图,然后才能以您尝试的方式设置约束,即

      [[vibrancyEffectView contentView] addSubview:EmailTextField];
      

      需要在您的constraintsWithVisualFormat:options:metrics:views: 调用之前。

      这是一个很好的链接,很好地解释了格式代码:http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/

      此外,您不需要为宽度和高度指定单独的约束,因为您在后续的位置约束中指定了这些。

      如果你想在视图中将文本字段居中,那么就使用显式的约束设置方法,很清楚(如果更冗长的话!):

      [NSLayoutConstraint constraintWithItem:EmailTextField
                                   attribute:NSLayoutAttributeCenterX
                                   relatedBy:NSLayoutRelationEqual                                                             
                                      toItem:[vibrancyEffectView contentView]
                                   attribute:NSLayoutAttributeCenterX 
                                  multiplier:1 
                                    constant:0];
      

      对于水平中心,对于垂直中心也是如此。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2016-05-13
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多