设置UILabel Align顶部不在单元格中工作

时间:2013-11-27 05:22:58

标签: ios iphone uitableview uilabel vertical-alignment

我在表格单元格中实现文本垂直对齐时遇到问题。

我想要做的是根据文本的长度,我希望在单元格的一侧UILabel中显示一条顶部对齐的消息。

例如,如果消息只有一行 文字应该对齐顶部: enter image description here

如果有两行,那么它应该是这样的:

enter image description here

一开始我能看到的就像这样

enter image description here

所以我搜索了网络,我找到的是 使用

[label1 sizeToFit];

但问题是在表格视图单元格中,特别是当我切换到另一个标签视图时,它并不总是被调用。

然后我尝试通过代码动态生成标签,但问题是更不用说设置我想要的字体格式的复杂过程了。我必须管理标签是否已插入,然后每次调用cellForRowAtIndexpath时重复使用它。

更奇怪的是,一旦我选择了这一行。对齐从您在第一张图片中看到的对齐切换到第三张图片。当我切换到不同的选项卡视图并切换回视图时也会发生这种情况。

我想知道是否有人遇到过这样的问题并找到问题的解决方案。

感谢您的回复。

修改

@βḧäṙℊặṿῗ,你说我试过了。如果只有一行,它会成功对齐标签文本。我的情况是,因为我有多个标签视图。一旦我在标签视图之间来回切换。对齐刚刚恢复到中心垂直对齐。当我选择行时也会发生这种情况。有什么想法吗?

4 个答案:

答案 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方法几乎相同。

http://i.stack.imgur.com/8u5q4.png