iOS:在启用了Autolayout的代码中设置视图大小

时间:2014-04-19 15:12:04

标签: ios objective-c uiview autolayout

我在标签栏导航中有两个视图控制器。在第二个场景中,我有一个额外的视图(只是一个简单的UIView)和一个设置它的颜色和边界的按钮。

CGRect viewRect = CGRectMake(20, 20, 70, 70);
self.animationView.bounds = viewRect;

self.animationView.backgroundColor =
[UIColor yellowColor];

此代码工作正常。但是,如果我导航到第一个视图控制器然后返回到第二个视图控制器,我的视图仍然是黄色,但它返回到我在界面构建器中设置的大小和位置。

我该怎样防止这种情况? 如果我禁用自动布局,则此行为结束,但我并不是真的想这样做。

1 个答案:

答案 0 :(得分:1)

为animationView约束创建出口,并更改其常量值。

在viewcontroller的.h文件中: 将插座连接到IB中的正确约束:

    //AnimationView Height Constraint 
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *cHeight;
    //AnimationView Width Constraint 
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *cWidth;
    //AnimationView Leading Constraint 
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *cLeading;
    //AnimationView Top Constraint 
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *cTop;

在ViewController的.m文件中设置约束的常量值,而不是框架:

    - (IBAction)btnTouched:(id)sender {
        [_cHeight setConstant:70];
        [_cWidth setConstant:70];
        [_cTop setConstant:20];
        [_cLeading setConstant:20];

        self.animationView.backgroundColor = [UIColor yellowColor];
    }

它会正常工作。