一个视图在autolayout中消失,ios

时间:2013-02-06 20:22:28

标签: iphone ios autolayout

目标是无论我处于纵向模式还是lanscape模式,我的图像将位于超级视图左边缘的20处,而viewHolder也将位于超级视图底边的20处。

我正在做的是

ViewController.h

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *verticalConsImage;
@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) IBOutlet UIView *viewHolder;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *bottomConsViewHolder;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topConsViewHolder;

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view removeConstraint:self.verticalConsImage];
    [self.view removeConstraint:self.topConsViewHolder];
    [self.view removeConstraint:self.bottomConsViewHolder];

    //the position of the imageView left edge is equal of the superview’s left edge plus 20.
    self.verticalConsImage = [NSLayoutConstraint
                                      constraintWithItem:self.imageView
                                      attribute:NSLayoutAttributeLeading
                                      relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                      attribute:NSLayoutAttributeLeading
                                      multiplier:1.0f
                                      constant:20.0f];
    // add it again to the view
    [self.view addConstraint:self.verticalConsImage];
    //the position of the viewHolder's bottom edge is equal of the superview’s bottom edge plus 20.    
    self.bottomConsViewHolder = [NSLayoutConstraint
                                      constraintWithItem:self.viewHolder
                                      attribute:NSLayoutAttributeBottom
                                      relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                      attribute:NSLayoutAttributeBottom
                                      multiplier:1.0f
                                      constant:20.0f];
    // add it again to the view
    [self.view addConstraint:self.bottomConsViewHolder];

但是,当我运行应用程序时,viewHolder在纵向或lanscape中根本不显示。图片如下 enter image description here

我在这里缺少的,如果您对此有任何想法,请提供帮助。感谢

1 个答案:

答案 0 :(得分:1)

您需要从黄色突出显示的视图中删除约束到IB中视图的顶部,并删除所有代码,不需要它。如果系统不允许你删除该约束,那是因为该视图没有内在大小,所以你需要先给它一个固定的高度,然后删除顶部约束。

我认为你的视图消失的原因是因为在4英寸屏幕上的IB中设置了2个约束,并且模拟器使用的是3.5英寸屏幕,因此为了保持这些约束,唯一可以改变的是视图的高度,可能设置为零或以下。