2014-06-27 125 views
-1

如果我是有3 UILabel这在我查看所有彼此相邻,这将是对隐藏在中间的一个最好的办法,而第三个转变,并采取它的空间?iOS的布局变化隐藏视图

因此,例如:

First Line 
Second Line 
Third Line 

如果我只是隐藏第二线,显然它只是不显示。它仍然占用空间。所以我会以此结束:

First Line 

Third Line 

什么会被认为是使第三行滑入第二行空间的'最佳'方法?我一直在寻找UICollectionView,但这似乎有点极端。

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

任何帮助将是伟大的!

谢谢。

+0

[隐藏视图时如何使用自动布局来移动其他视图?](http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-移动,其他的视图 - 当-A-视图中隐藏) –

回答

2

(在Android原生/ Java中你会拿到免费的。:-)

这是没有那么多的代码,如果它仅仅是有关删除一个。

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

问题来了,当你想要第二个标签重新出现。那么你需要将其框架存储在某个地方。

如果它是关于连续多个标贴则更多的东西一般是有用的。您可能想要考虑使用表格。您可以轻松地将表格嵌入视图布局以及其他视图项目。你可以很容易地介绍自己的最简单UITableViewCell刚刚进行不浪费任何周围的白色空间的一个相当小的标签。另外,您必须设置表格的单元高度才能使其发生。

+0

是的,我已经做了,在过去的一些Android的工作,并希望为它在这方面相似的,不幸的是不!无论如何感谢您的输入。此外,这将是一个完整的视图充分的控制,不只是3我简化了问题。 –

+0

然后请考虑表格或集合视图。如果这不符合您的需求,那么您将不得不以编程方式布置这些项目。这就是我在布局要求对接口构建器动态化时所做的。我可能会把所有东西放在一起,但仍然在代码中正确地布置它们。甚至可能有IB(或故事板编辑器)可能根本没用的情况。您也可以动态创建每个UI对象。 –

+0

是的,不幸的是,没有什么容易使用,真正对应于相对布局或线性布局等,并且只有这种隐藏对象的方式,而不是你习惯于看到的两个状态'不可见'和'已逝' 。隐藏视图及其子视图的第二种方法是将最顶层视图的alpha属性设置为0,但这不会对您的问题做出更改。 –

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]; 
+0

请勿直接调用'layoutSubviews'。相反,调用'setNeedsLayout',系统会在适当的时候为你调用'layoutSubviews'。如果您不能等到那个时候,请调用'setNeedsLayout',然后调用'layoutIfNeeded'。 – herzbube

+0

为什么这样做,他们旧的方式与帧时,你可以使用iOS 6 –

+0

介绍了新的自动布局标准,因为只限于iOS6和更高的运行限制没有提到。所以您仍然可以使用它在旧iPad 1上运行;) – robert

0

在这种特殊情况下,看起来最简单的方法是清除第二个标签中的文本,将其设置为零,然后按要求将其折叠:

label2.text = nil