当父视图没有占用空间时,如何重新定位UIView?

时间:2014-08-29 20:56:29

标签: ios uiview swift position cgrect

我正在尝试使用此代码在给定一定数量的行的情况下以编程方式向下移动视图:

view.frame = CGRectMake(0, 40*rows, 320, 80)

但它只会向下移动到某一点。我认为问题是父视图没有占用足够的空间让视图进入,但我不确定。这是我正在谈论的截图:

我是以编程方式添加指向“链接”部分的链接,并希望将“设置”部分向下移动以解决此问题。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

不要试图计算这样的位置!我的意思是,你可以,但你要求麻烦。想想如果您想要支持横向模式,或者如果Apple决定释放另一个屏幕尺寸,您将遇到的所有麻烦。你需要重新进行这些计算。

2个解决方案:

解决方案1:使用TableView。 (推荐)

TableViews已经内置了动态调整大小。我建议使用“链接”,“设置”,“夜间模式”的节标题。您可以通过实现此TableView委托方法为节标题使用自定义视图:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

链接部分将包含您需要的tableViewCells,但设置和夜间模式将有0行。为此,您可以实现:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

解决方案2:使用AutoLayout

基本上,您使用约束将第一个链接行直接放在“链接”视图下方,将每个链接行直接放在上一个链接行的下方,并将“设置”视图直接放在最后一个链接行的下方。

视觉图

(每个|是一个约束,指定视图之间的垂直距离。)

[Links]
 |
[link row 1]
 |
[link row 2]
 |
[link row 3]
 |
[Settings]

虽然这种方法比使用框架更好,因为您可以轻松支持多种屏幕尺寸,但我不建议使用此方法。这种方法基本上是重做UITableView已经为你做的很多工作。但要了解多种方法,以便做出明智的决定是很好的。