AutoLayout将UILabel高度设置为零

时间:2015-08-28 13:15:59

标签: ios objective-c autolayout

我在其他视图中有一个UILabel项目描述,全部使用Interface Builder中的约束进行布局 - 您可以在下面的图像中看到所有相关约束。行数也设置为0

enter image description here

我还没有设置高度限制,因为我希望UILabel根据它包含的文本调整大小。相反,发生的事情就在

之后
[self.view layoutIfNeeded];
调用

UILabel的高度设置为0。即使我没有将其他文本设置为UILabel,它也会在Interface Builder中设置默认值项目描述

上面的项目标题标签设置方式相同,但不会被压缩到0,所以我有点困惑。

任何人都有过这种行为的经历吗?

5 个答案:

答案 0 :(得分:12)

我设法通过在Interface Builder中将UILabel vertical compression resistance priority设置为1000(默认750)来解决此问题。

enter image description here

由于我的视图嵌入在另一个视图中,并且父视图的底部依赖于最低子视图的底部,我只推测没有高度约束的UILabel被挤入布置意见的过程。可能在链条的某个地方玩其他约束的优先级会产生相同的结果,但我无法成功地做到这一点。然而,上面的解决方案是有效的,这在我的情况下已经足够了。

希望这有助于某人。

答案 1 :(得分:1)

设置3约束

1.领导空间到superview

2.Trailing space to superview

3.Top space to superview

然后

$("#header").fadeOut(500, //Speed
                     function () { //On fadeOut complete
                            $(this).css("background-image", "url(img2.jpg)") //Change BG
                                   .fadeIn(); //FadeIn
                     });

答案 2 :(得分:1)

从标签拖动到自身>选择高度>将高度常量设置为0并将等于(==)更改为大于或等于(> =)

答案 3 :(得分:1)

我认为您需要在标签上设置5个约束:

  • 领导空间到superview
  • 追踪空间到superview
  • 垂直空间至"项目"
  • 垂直空间至"名称"
  • 高度

然后在控制器中在约束高度上添加一个IBOutlet(让我们说像labelHeight)。

因此,在viewDidLoad中,您将能够设置此约束值:

initial_list = raw_input().split() # split(' ') works, but you don't actually need the ' ',
                                   # split() on its own does the same job here
if len(initial_list) <= 1000:
    actual_integers = map(int, initial_list) #Moved to here.  Note that
                                             #actual_integers is a list
                                             #so for the following comparison
                                             #you just want to look at the max
                                             #and min (individual values)
    if min(actual_integers) >= 1 and max(actual_integers) <= 1000:
        print sum(actual_integers)
    else:  #Just added two nice messages to the user if it doesn't print out.
        print 'integers must be in range 1-1000 inclusive'
else:
    print 'your list must have 1000 integers or fewer'

答案 4 :(得分:1)

AutoLayout中的

UIViewController无法满足您设置的所有constraints,因此会忽略UILabel上的那些,从而导致压缩状态。您应该查看constraints中的其他UIViewController,并将priority的{​​{1}}设置为更高的数字。