使用UIButtons更改大小的iOS reflow布局

时间:2014-02-07 20:39:35

标签: ios objective-c uibutton interface-builder autolayout

我正在构建一个iOS应用程序,它使用UILabel在屏幕顶部显示一个问题,然后在titleLabel中显示一些带有文本的UIButtons以获得答案。我使用此视图在不同时间显示许多不同的问题,每个问题和答案集中包含不同数量的单词。结果,每个UIButton最终可能会有不同数量的单词,这会产生布局问题。我目前正在使用这样的代码:

self.firstAnswer.titleLabel.numberOfLines = 0;
self.firstAnswer.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.firstAnswer.titleLabel.textAlignment = NSTextAlignmentCenter;
[self.firstAnswer sizeToFit];

允许按钮调整自身大小以保持屏幕上的所有文本。然而,当按钮垂直调整太多时,它也会导致uibuttons垂直重叠(即,titleLabel现在是4行而不是1行)。是否有任何方法可以使一个垂直位于另一个已调整大小的按钮下方的按钮向下移动以为新调整大小的按钮腾出空间?

2 个答案:

答案 0 :(得分:1)

如果您根据firstAnswer的新高度更新以下按钮的位置怎么办:

self.secondItem.frame = CGRectMake(self.secondButton.frame.origin.x, 
                                   self.firstAnswer.frame.origin.y + self.firstAnswer.frame.size.height + 10,
                                   self.secondButton.frame.size.width, 
                                   self.secondButton.frame.size.height);

如果您有多个其他项目,您可以在每个后续项目之后重新定位它们,或者对所有项目使用一般偏移量。

编辑: 如果跟随多个按钮,你也可以将它们放在一个透明的UIView中,然后只是单独偏移UIView。

答案 1 :(得分:0)

是的,使用自动布局并将按钮垂直间距约束赋予最近的顶部和底部邻居。无论按钮需要多少行,这都会保持间距相同。