我在表格单元格中实现文本垂直对齐时遇到问题。
我想要做的是根据文本的长度,我希望在单元格的一侧UILabel中显示一条顶部对齐的消息。
例如,如果消息只有一行 文字应该对齐顶部:
如果有两行,那么它应该是这样的:
一开始我能看到的就像这样
所以我搜索了网络,我找到的是 使用
[label1 sizeToFit];
但问题是在表格视图单元格中,特别是当我切换到另一个标签视图时,它并不总是被调用。
然后我尝试通过代码动态生成标签,但问题是更不用说设置我想要的字体格式的复杂过程了。我必须管理标签是否已插入,然后每次调用cellForRowAtIndexpath时重复使用它。
更奇怪的是,一旦我选择了这一行。对齐从您在第一张图片中看到的对齐切换到第三张图片。当我切换到不同的选项卡视图并切换回视图时也会发生这种情况。
我想知道是否有人遇到过这样的问题并找到问题的解决方案。
感谢您的回复。
修改
@βḧäṙℊặṿῗ,你说我试过了。如果只有一行,它会成功对齐标签文本。我的情况是,因为我有多个标签视图。一旦我在标签视图之间来回切换。对齐刚刚恢复到中心垂直对齐。当我选择行时也会发生这种情况。有什么想法吗?
答案 0 :(得分:4)
试试这个
// label will use the number of lines as per content
[myLabel setNumberOfLines:0]; // VERY IMP
[myLabel sizeToFit];
修改强>
由于您有一个额外的条件,最多显示两行,那么您需要设置setNumberOfLines
:到2
[myLabel setNumberOfLines:2];
答案 1 :(得分:1)
创建UILabel+Extras
并将以下方法添加到此类。
- (void)alignTop{
CGSize fontSize = [self.text sizeWithAttributes:@{NSFontAttributeName:self.font}];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width; //expected width of label
CGRect rect = [self.text boundingRectWithSize:CGSizeMake(finalWidth, finalHeight) options:NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName:self.font} context:nil];
CGSize theStringSize = rect.size;
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i=0; i< newLinesToPad; i++)
self.text = [self.text stringByAppendingString:@" \n"];
}
像这样调用这个方法..
[YOUR_LABEL alignTop];
答案 2 :(得分:0)
将“否”行设置为0,如
[yourLabelObject setNumberOfLines:0];
[yourLabelObject sizeToFit];
或者
您可以在运行时找到标签的高度,具体取决于textString长度。 以下方法将返回标签长度(文本字符串)的大小(高度和宽度)。 这里宽度是固定的,只有高度会改变:
- (CGSize) calculateLabelHeightWith:(CGFloat)width text:(NSString*)textString andFont:(UIFont *)txtFont
{
CGSize maximumSize = CGSizeMake(width, 9999);
CGSize size = [textString sizeWithFont:txtFont
constrainedToSize:maximumSize
lineBreakMode:UILineBreakModeWordWrap];
return size;
}
每当你设置文字和设置标签框
时,你都需要计算标签的框架我希望这会对你有所帮助。
答案 3 :(得分:0)
可能听起来有点傻但这是我的方法:对于任何需要顶部对齐的字段,我用多个&#34; \ n&#34; s填充文本。这会使文本自动顶部对齐。与上面的Mehul方法几乎相同。