我有一个UILabel,-numberOfLines
都设置为3,文本大小自动缩小,我需要将另一个UIView与此UILabel的最后一行文本对齐。也就是说,我可能需要对齐第0,1或2行的y位置,具体取决于标签内的文本(这些文本行之间的距离可能会有所不同,具体取决于文本是否足够长以至于触发了字体调整大小)。
可是:
contentSize
继承UILabel并做类似的事情:
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0., 0., -30., 0.};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
恰好适用于我有3行并且字体大小自动缩小的情况,但我仍然可以找出一般情况下减去插入的通用方法,无论文本大小如何。我似乎也无法使用-boundingRectWithSize:options:context:
:它返回一行等效的rect,或者,如果我使用选项,aa rect与原始标签的大小相同(即包括我试图摆脱的额外插图)。请注意,删除任何插入后面的想法是,如果我无法知道最后一行文本的位置,至少我可以删除标签中的任何插入内容,以便最后一行文本与标签{{1 }}
有什么想法吗?
答案 0 :(得分:0)
我不知道问题是不是最初我在非归属文本上使用boundingRectWithSize
或者现在看起来有用了什么:
NSString *text = <get text from CoreData>;
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: self.titleLabel.font}];
CGRect rect = [attributedText boundingRectWithSize:self.titleLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
if (!rect.size.height || rect.size.height > self.titleLabel.frame.size.height) {
attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:self.titleLabel.font.pointSize * self.titleLabel.minimumScaleFactor]}];
rect = [attributedText boundingRectWithSize:self.titleLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
}
self.titleLabel.frame = rect;
self.titleLabel.attributedText = attributedText;
虽然这并没有真正找到UILabel中最后一行文本底部的位置(标签仍然在底部添加了一些填充...不确定是否考虑下行),它会调整标签的边界足够接近底部,我至少可以根据bounds.origin.y + bounds.size.height
对齐,看起来很好。