如何灵活地在表格中定位UI按钮?

时间:2014-01-25 17:49:28

标签: ios iphone autolayout

我需要在一个垂直列表中灵活地定位UIButton

A
B
C
D

问题在于它需要灵活,就像缺少B时一样:

A
C
D

所以应该没有空格,但UIButton应向上移动

现在我按照编程方式定位UIButton s,但只有在关闭Autolayout

时才能在iOS7中实现

但是现在又需要将所有其他元素 - 特别是在屏幕底部 - 也以编程方式定位,我不想这样做。

如何以这种方式定位UIButton,而无需以编程方式在屏幕上以编程方式定位所有其他元素。

在Android中,tablelayoutlinearLayout会自动处理!

编辑:

这是一个巨大的痛苦,但这就是它的工作原理:

  
      
  1. 将你所有的btns很好地左对齐,在彼此之下,这样你就可以在IB中很好地看到它们。在这个阶段,垂直间距无关紧要,因为我们删除了由IB创建的所有这些constranints并以编程方式添加了我们想要的垂直间距
  2.   
  3. 现在确保只有你想要的约束,以及你不想要的IB创建的约束。
  4.   
  5. 特别是删除要以编程方式重新定位的btns之间的所有垂直间距约束。通过单击灰色弹出窗口中的“添加约束”,逐个添加您想要的约束。在此之后不再触摸您的布局 - 您可以轻松搞砸它!
  6.   
  7. 例如,使用此代码重新定位与C相关的A。别忘了设置B隐形
  8.   
UIView *superview = self.view;

NSMutableArray *mutableConstraintsArray =[[NSMutableArray alloc]init];
NSLayoutConstraint *constraint =       [NSLayoutConstraint constraintWithItem:A
                                                                    attribute:NSLayoutAttributeBottom

                                                                    relatedBy:NSLayoutRelationEqual toItem:C

                                                                    attribute:NSLayoutAttributeTop multiplier:1.0 constant:-20.0];//C is 20 points under A
[mutableConstraintsArray addObject:constraint];


for (int i = 0; i<mutableConstraintsArray.count; i++) {
    [superview addConstraint:mutableConstraintsArray[i]];
}

我在这里使用了mutableConstraintsArray所以我此时可以添加多重约束!

很多努力恕我直言!

如果有更简单的方法,请更正/改进!

感谢亚光让我指向正确的方向。

2 个答案:

答案 0 :(得分:1)

  

现在我以编程方式以编程方式定位UIButtons,但这只能在iOS7中实现,如果我关闭Autolayout

那不是真的。您还可以以编程方式使用自动布局约束。假设已删除的按钮B对其上方的按钮A有约束,并对其下方的按钮有约束,C。当您删除B时,在A和C之间进行约束(以编程方式)并将该约束添加到它们的公共中上海华。完成! C现在移动到位,D移动到位,其余的跟随。

答案 1 :(得分:0)

尝试以编程方式执行:

for( i=1 ; i<[no of buttons you want to create]; i++)
{
        button =[UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame     = CGRectMake(5 , y + 30, 82, 82);
        button.Tag= i;
        [self.view addSubView: button];
}

现在一切都取决于你的输入,你在屏幕上有多少按钮,关于帧,你可以用x和y坐标来操纵逻辑来调整正确的位置。并且您也可以使用他们的标签来使用每个按钮....

如果您不在数组中放置按钮然后将i与该数组的计数进行比较,那将是很好的。

我做到了这一点并且工作正常。