我有两条多线UILabels
。父UIView
只有一定的大小(高度),但标签可以包含一个长字符串。我想要的是始终显示第一个标签(例如,如果它变得太长则缩写为......)。如果有空间,应显示第二个标签。再次,如果它太长,它应该缩写为......
这是我目前使用的约束:V:|-5-[title]-0-[description]-(>=0)-|
在某些情况下,第二个标签会被切断:
我该怎么办?我是否必须更改约束?我能以某种方式隐藏第二个标签吗?但是,如何检测标签何时被切断?
在另一种情况下,第二个标签根本没有显示。第二个标签也不应溢出父UIView
。如何处理这种情况?
答案 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,您可以保存一些计算。然而,我使用的方式允许调整字体,以便动态计算所有内容。