2015-05-22 44 views
1

我有两个多行UILabels。父UIView只有一定的大小(高度),但标签可以包含一个长字符串。我想要的是始终显示第一个标签(例如,如果它变得太长,缩写为...)。如果有空间,应显示第二个标签。再次,如果它太长了,应该得到缩写为...如果标签比父母UIVIew大,该怎么办?

这是我目前使用的约束:V:|-5-[title]-0-[description]-(>=0)-|

在某些情况下,第二个标签被切断这样的:

second label is cut off

我该怎么办?我必须改变约束吗?我能否以某种方式隐藏第二个标签?但是,我应该如何检测标签何时被切断?

在另一种情况下,根本没有显示第二个标签。第二个标签也不应该溢出父母UIView。应该如何处理这种情况?

+0

薰衣草色是包含2个标签的视图? –

+0

@Bhavin:是的,它包含两个标签。 – testing

+0

好的......和它的固定高度视图? –

回答

0

我相信四舍五入发生在iOS的某个地方,因为标签会适合(一行,然后在...的末尾),如果将有0.75pt多的空间。所以它吸引了它,但由于缺少0.75pt空间而被切断。

现在我采取了以下方法:计算第二个标签(应该是关于一行的引用文本)是否适合父视图?如果不隐藏它。我只有在C#代码,但你应该得到的想法:

public override void LayoutSubviews() 
{ 
    base.LayoutSubviews(); 

    NSString referenceTextToMeasure = new NSString ("Lorem ipsum dolor sit amet."); 
    // take the font of the description label which was cut off 
    CGRect referenceTextRect = referenceTextToMeasure.GetBoundingRect (
     new CGSize(this.Frame.Width, nfloat.MaxValue), 
     NSStringDrawingOptions.UsesLineFragmentOrigin, 
     new UIStringAttributes() { Font = descriptionLabelFont }, 
     new NSStringDrawingContext() 
    ); 

    // 5 is the spacing constraint I have on the top 
    if ((this.Frame.Height - TitleLabel.Frame.Height - 5) < referenceTextRect.Height) 
     DescriptionLabel.Hidden = true; 
} 

似乎工作得很好,但一个完整的测试必须进行。你也可以使用固定的高度来代替referenceTextRect.Height,你可以节省一些计算。不过,我使用的方式允许调整字体,以便动态计算所有内容。

相关问题