自动布局 - 将一个UILabel的原点替换为其他UILabel

时间:2015-10-06 07:16:41

标签: ios autolayout uilabel

我有两个UILabel。一个UILabel位于其他顶部。我想要的是,如果顶部没有内容,则底部应该采用顶部的原点 我必须在屏幕上使用自动布局。我尝试使用sizeToFit,但这不起作用。如果顶部UILabel中没有内容,那么底部UILabel仍然会停留在其原点。

4 个答案:

答案 0 :(得分:1)

设置高度约束不起作用。第二个标签的y位置将无法获得正确的Y轴值(它将向上移动)。通过在两个结果之间使用vertical spacing constraint解决您的问题

说明: - 设置标签的正常基本约束加上垂直间距约束。如果上部标签中没有文本,则按如下方式更新垂直间距约束: -

verticalSpacingConstraintBetweenLabels.constant = -(KIntialVerticalSpacing + (KHeightOfLabel-KIntialVerticalSpacing));

enter image description here

我为你创建一个sample project源代码可在以下位置找到: - https://www.dropbox.com/s/eq9hinnw4sdfltq/LabelSpacing.zip?dl=0

答案 1 :(得分:0)

该要求的一个替代方案是将IBOutlet设为上标签的高度,并在您不想显示时将其设置为0。但请记住,您必须在上下标签之间设置垂直间距。较低的标签不应具有超级视图的上边距。

答案 2 :(得分:0)

First drag both top constrains to UIViewController. Second paste this code:

-(void) loadLabels{
    _firstLabel.text=@"";
    NSInteger heidFirstLabel = 20;
    if(_firstLabel.text.length == 0){
        _constrainTopFirstLabel.constant = 0 - heidFirstLabel;
        _firstLabel.hidden = YES;
    }else{
        _constrainTopFirstLabel.constant = 8 ;
    }
}

I always use this.

答案 3 :(得分:0)

在iOS9中,Apple引入了一个新类UIStackView来解决这个以及开发人员面临的其他问题,使用自动布局。如果您的目标是iOS 9及更高版本,则应使用此类。

如果您要在iOS 9之前定位版本,则可以使用内在内容大小之一。

1.Subclass UILabel

2.添加一个确定此标签是否折叠的属性

@property (nonatomic,assign) BOOL isLabelCollapsed;

3.Override方法intrinsicContentSize

- (CGSize)intrinsicContentSize {
    if(self.isLabelCollapsed)
        return CGSizeMake(0, 0);
    else
        return [super intrinsicContentSize];
}

4.将可折叠标签类设置为自定义类。

5.如果需要,请将isLabelCollapsed媒体资源设置为YES,然后在您的可折叠标签上调用invalidateIntrinsicContentSize