2014-11-03 95 views
0

我试图更好地理解自动布局,并且创建了一些可以帮助我的静态方法。现在我试图在tableview结构中设置一个视图数组(在行中)。这工作挺好。iOS自动布局行

看到这里我的问题:

enter image description here

要做到这一点我用这个代码:

//In the update constraints method 
UIView *view1 = [self createView]; 
view1.backgroundColor = [UIColor redColor]; 
UIView *view2 = [self createView]; 
view2.backgroundColor = [UIColor yellowColor]; 

[self addSubview:view1]; 
[self addSubview:view2]; 

[self addConstraints:[DXVFL row:@[view1, view2] inView:self]]; 

//The row method 
+ (NSArray *) row:(NSArray const *)views inView:(UIView const *)superview { 
    NSMutableArray *constraints = [NSMutableArray new]; 
    CGFloat multiplier = 1.f/[views count]; 
    UIView *prev = nil; 

    for (UIView *view in views) { 
     if (!view.hidden) { 
      [constraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeWidth multiplier:1.f constant:0.f]]; 
      [constraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeHeight multiplier:multiplier constant:0.f]]; 

      if (prev) { 
       [constraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:prev attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]]; 
      } 

      prev = view; 
     } 

    } 
    return [constraints copy]; 
} 

所以这部分工作(我猜)。但是当我想要再次按行分割黄色视图时。视图总是添加到顶部区域?

在更新约束方法我这样做:

UIView *view1 = [self createView]; 
view1.backgroundColor = [UIColor redColor]; 
UIView *view2 = [self createView]; 
view2.backgroundColor = [UIColor yellowColor]; 

[self addSubview:view1]; 
[self addSubview:view2]; 

UIView *view3 = [self createView]; 
UIView *view4 = [self createView]; 
[view2 addSubview:view3]; 
[view2 addSubview:view4]; 

[self addConstraints:[DXVFL row:@[view1, view2] inView:self]]; 
[view2 addConstraints:[DXVFL row:@[view3, view4] inView:view2]]; 

enter image description here

不过,我想在底部的两行?我究竟做错了什么?

回答

0

关闭我的头顶:

您需要添加一个约束来告诉它对准着眼于上海华顶。目前,您只需设置高度和宽度,但不要告诉它将顶端边缘放在哪里。

试着改变你的代码如下:

if (!prev) { 
    [constraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]]; 
} else { 
    [constraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:prev attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]]; 
} 
+0

你是对的。 if(!prev)修复了我的问题,并将行正确放置在我想要的视图中! – Haagenti 2014-11-04 14:41:39