2013-11-27 37 views
2

我有一个问题来实现表格单元格内的文本垂直对齐。设置UILabel对齐顶部不在单元格中工作

我想要做的是基于文本的长度,我想显示一个消息顶部对齐一个单元格内的第一面UILabel。

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

如果有两行就应该是这样的:

enter image description here

在开始我能看到的是这样的

enter image description here

所以我在网上搜索,什么我发现是 使用

[label1 sizeToFit];

但随着这个问题是表视图细胞有时也不一定特别是所谓的内部,当我切换到从另一个标签视图。

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

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

我想知道是否有人遇到过这样的问题,并且解决了这个问题。

谢谢您提前回复。

编辑:

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

+0

你设置YOUR_LABLE_OBJ.numberOfLines = 0; ? –

回答

4

试试这个

// label will use the number of lines as per content 
[myLabel setNumberOfLines:0]; // VERY IMP 
[myLabel sizeToFit]; 

编辑:

当你有一个最大限度地显示两行,那么你需要设置setNumberOfLines一个额外条件:2

[myLabel setNumberOfLines:2]; 
+0

@AashishJoshi是的。另请阅读[numberOfLine](https://developer.apple.com/library/ios/documentation/uikit/reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instp/UILabel/numberOfLines)和[sizeToFit] (https://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/sizeToFit) –

+0

我被测试@βḧäṙℊặṿῗ的回答是完美运行你可以使用这个。 – Maul

+0

是的,我已将其设置为0.但是,在视图之间切换时,标签不一致显示。我只是想知道如何实现iPhone的本地消息应用程序。 – TypingPanda

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; 
} 

呦需要当u [R做设置文本和标签

的设置帧我希望这将有助于您每次来计算标签的框架。

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]; 
+0

哦,是的,这是东西! – nmdias

0

听起来有点傻,但是这是我的方法:对于需要进行顶部对齐我填的文字了多个“任何领域\ N“秒。这会导致文本自动顶部对齐。几乎与Mehul的方法一样。

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