【发布时间】:2012-12-24 20:14:22
【问题描述】:
我必须在这里遗漏一些非常明显的东西,但这是一个让我沮丧了好几天的问题。
在 xcode 4.5 上的 iOS 项目中,我在一个 XIB 中有几个标签,一个在另一个之上,在一个 UIScrollView 中,它占据了一个 UIView。每个标签都与视图一样宽,每个标签都比下一个高 20 px。有时,其中一个标签没有任何信息,因此它被设置为不可见,并且它下面的标签应该向上移动以占据空白空间。
问题是,如果在视图上选中“关闭”自动布局,标签会完全按照应有的方式向上移动,尽管 UIScrollView 不再滚动。如果是on,则无论如何标签都不会移动。
这是代码...我基本上只是使用一个快速函数将每个标签向上移动不可见标签的高度。
[self moveObjectBy: self.festNameLabel moveByY:-(yearsLabel.frame.size.height-2)];
// this just quickly moves a label.
- (void)moveObjectBy:(UIView *)lbl moveByY:(int)byHeight {
CGRect newFrame = lbl.frame;
NSLog(@"%f, %d", newFrame.origin.y, byHeight);
newFrame.origin.y += byHeight; //yearsLabel.frame.size.height;
lbl.frame = newFrame;
}
当它运行时,NSLog 显示它的 Y 已移动,但它不会在屏幕上移动。我确定它与垂直空间约束有关,但它不会让我删除约束,也不会让我将其更改为视图顶部空间以外的任何内容。就像我说的,我确定我错过了一些东西,但我已经用尽了我所知道的一切......
【问题讨论】:
-
您设置为隐藏的只是一个特定标签,还是可以是其中任何一个?
-
它可以是其中任何一个,但如果我能弄清楚如何将它们向上移动,我可以处理它!
-
我已经编辑了我的答案以允许这样做。
-
我用一种更简单的方式再次编辑了我的答案。这样,您只需要对每个标签进行垂直约束。
标签: iphone objective-c ios autolayout