iOS布局更改隐藏视图

时间:2014-06-27 12:16:55

标签: ios objective-c autolayout

如果我的视图中有3个UILabel彼此相邻,那么隐藏中间视图的最佳方法是什么,第三个方法是向上移动并占据它的空间?

例如:

First Line
Second Line
Third Line

如果我只是隐藏第二行,显然它只是没有显示。它仍占用空间。所以我最终会这样:

First Line

Third Line

什么被认为是最好的'让第三条线进入第二线空间的方法?我一直在看UICollectionView,但这看起来有点极端。

我可以编写一堆构建视图的代码,按照它们应该的顺序排列,但这将涉及大量工作,而且我相当确定那里有一种更简单的方法......也许我错了!

任何帮助都会很棒!

感谢。

3 个答案:

答案 0 :(得分:2)

(在Android原生/ Java中你可以免费获得。:-)

如果它只是删除一个代码,那就不是那么多了。

[secondLineLabel setHidden:YES];
[thirdLineLabel setFrame:[secondLineLable frame]];

当您希望第二个标签重新出现时,问题就出现了。然后你需要将它的框架存储在某个地方。

如果它是连续的更多标签,那么更通用的东西将是有用的。您可能想要考虑使用表格。您可以轻松地将表格与其他视图项目一起嵌入到视图布局中。你可以很容易地介绍你自己最简单的UITableViewCell,它只带有一个相当小的标签,而不会浪费任何周围的空白区域。另外,您必须设置表格的单元格高度才能实现。

答案 1 :(得分:0)

在方法中设置标签(例如layoutSubviews)并动态制作该布局(此处y坐标可能会有所不同):

- (void)layoutSubviews{
     CGFloat currentY = 0;//some initial value
     CGFloat labelX = 20;//some value
     firstLineLabel.frame = CGRectMake(labelX,currentY,CGRectGetWidth(firstLineLabel.bounds),CGRectGetHeight(firstLineLabel.bounds));

     if(!firstLineLabel.hidden){
         currentY += CGRectGetHeight(firstLineLabel.bounds);
     }

     secondLineLabel.frame = CGRectMake(labelX,currentY,CGRectGetWidth(secondLineLabel.bounds),CGRectGetHeight(secondLineLabel.bounds));

     if(!secondLineLabel.hidden){
         currentY += CGRectGetHeight(secondLineLabel.bounds);
     }

     //continue with the other views
}

然后在隐藏/取消隐藏标签时调用此方法

firstLineLabel.hidden = YES;
[self setNeedsLayout];

答案 2 :(得分:0)

在这种特殊情况下,似乎最简单的方法是清除第二个标签中的文本,这样可以将其所需的大小设置为零,并且事情会根据需要崩溃:

label2.text = nil