如果我的视图中有3个UILabel
彼此相邻,那么隐藏中间视图的最佳方法是什么,第三个方法是向上移动并占据它的空间?
例如:
First Line
Second Line
Third Line
如果我只是隐藏第二行,显然它只是没有显示。它仍占用空间。所以我最终会这样:
First Line
Third Line
什么被认为是最好的'让第三条线进入第二线空间的方法?我一直在看UICollectionView
,但这看起来有点极端。
我可以编写一堆构建视图的代码,按照它们应该的顺序排列,但这将涉及大量工作,而且我相当确定那里有一种更简单的方法......也许我错了!
任何帮助都会很棒!
感谢。
答案 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