gpt4 book ai didi

iphone - 无法在 View 中使用自动布局 "on"移动 UILabel 的 Y 位置

转载 作者:可可西里 更新时间:2023-11-01 03:05:48 26 4
gpt4 key购买 nike

我一定错过了一些非常明显的东西,但这个问题让我沮丧了好几天。

在 xcode 4.5 上的一个 iOS 项目中,我在一个 XIB 中有几个标签,一个在另一个之上,在一个占用 UIViewUIScrollView 中。每个标签与 View 一样宽,每个标签比下一个标签高出约 20 像素。有时,其中一个标签没有任何信息,所以它被设置为不可见,并且它下面的标签应该向上移动以占据空白空间。

问题是,如果自动布局在 View 上被选中“关闭”,标签将完全按照它们应该的方式向上移动,尽管 UIScrollView 不再滚动。如果它是打开,那么无论如何标签都不会移动。

这是代码...我基本上只是使用一个快速函数将每个标签向上移动不可见标签的高度。

[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 已经移动,但它并没有在屏幕上移动。我确定它与垂直空间约束有关,但它不会让我删除约束,也不会让我将它更改为 View 顶部空间以外的任何内容。就像我说的,我确定我错过了一些东西,但我已经用尽了所有我知道要做的事情......

最佳答案

如果您只有一个可能被隐藏的标签,您可以将其下方的标签向上移动:

 -(void)contract {
self.label2.hidden = YES;
self.con2To1.constant = -34;
}

顶部标签对 ScrollView 的顶部有限制,所有其他标签对其上方和下方的标签都有 20 点的垂直距离限制。在这个例子中,我隐藏了 label2。这些标签都是 34 点高,因此将约束常量从 20 更改为 -34 会将现在隐藏的标签移动到其上方标签的正上方。

要将此方法用于可隐藏的多个标签,您需要为每个要隐藏的标签设置一个导出,并对其对上面标签的约束。您实际上可以在没有约束条件的情况下做到这一点,但我不知道它是否会如此健壮(它可能会选择错误的约束条件)。我能够通过遍历约束来找到与特定标签相关的约束来做同样的事情,并且是该标签顶部的约束:

-(void)hideLabel:(UILabel *) label {
label.hidden = YES;
for (NSLayoutConstraint *con in self.scroller.constraints) {
if (con.firstItem == label && con.firstAttribute == NSLayoutAttributeTop) {
con.constant = -34;
}
}
}

如果您愿意,可以修改相同的方法以使用动画——以下代码片段淡出您要隐藏的标签,同时动画化所有较低标签的向上移动。

 -(void)hideLabel:(UILabel *) label {
for (NSLayoutConstraint *con in self.scroller.constraints) {
if (con.firstItem == label && con.firstAttribute == NSLayoutAttributeTop) {
con.constant = -34;
[UIView animateWithDuration:.5 animations:^{
label.alpha = 0;
[self.scroller layoutIfNeeded];
}];
}
}
}

关于iphone - 无法在 View 中使用自动布局 "on"移动 UILabel 的 Y 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14025368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com