我有两个UILabel
。一个UILabel
位于其他顶部。我想要的是,如果顶部没有内容,则底部应该采用顶部的原点
我必须在屏幕上使用自动布局。我尝试使用sizeToFit
,但这不起作用。如果顶部UILabel
中没有内容,那么底部UILabel
仍然会停留在其原点。
答案 0 :(得分:1)
设置高度约束不起作用。第二个标签的y位置将无法获得正确的Y轴值(它将向上移动)。通过在两个结果之间使用vertical spacing constraint
来解决您的问题。
说明: - 设置标签的正常基本约束加上垂直间距约束。如果上部标签中没有文本,则按如下方式更新垂直间距约束: -
verticalSpacingConstraintBetweenLabels.constant = -(KIntialVerticalSpacing + (KHeightOfLabel-KIntialVerticalSpacing));
我为你创建一个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
。