iOS 6 UILabel无法居中对齐文本

11

我正在开发一个最低支持iOS 5的iOS应用,但是我遇到了一个奇怪的UILabel问题。或许是我忽略了明显的问题。无论如何,我的问题是我有一个要居中文本对齐的UILabel,在iOS 5上都运行良好,但在iOS 6上始终左对齐。我已经看到了设置UILabel文本对齐的旧方法已被弃用,而设置为这样应该可以工作。

self.topComment.textAlignment = NSTextAlignmentCenter;

但即便如此,在iOS 5上仍然只能居中对齐,在iOS 6上则是左对齐。 我有一些代码可以调整标签中文本的字体大小,尝试使其适应最小和最大大小。

UIFont *font = self.topComment.font;

for(int i = maxFont; i > minFont; i--)
{
    // Set the new font size.
    font = [font fontWithSize:i];
    CGSize constraintSize = CGSizeMake(self.topComment.frame.size.width, 1000);
    CGSize labelSize = [topString sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    if(labelSize.height <= self.topComment.frame.size.height ) {
        fits = YES;
        break;
    }
    //self.topComment.text = topString;

}


self.topComment.font = font;
self.topComment.text = topString;

这就是我对标签所做的唯一更改,但它在iOS 6中总是左对齐。需要注意的是,如果我插入一个带文本并且居中对齐的UILabel,并且不使用上述代码,则在iOS 5和6上都是居中对齐的。


尝试使用UITextAlignmentCenter而不是NSTextAlignmentCenter。 - Ivor Prebeg
uitextalignmentcenter在iOS6中已经被弃用,如果我正确理解他们的文档的话。但是为了好玩,我还是尝试了一下,结果出现了同样的问题。 - glogic
你的文本是左对齐的还是标签框架只适合文本大小? - Eiko
UILabel本身是文本对齐的。我尝试在nib文件中居中文本对齐选项,并在代码中设置它。 - glogic
是的,我也试过了,可惜没有成功。 - glogic
显示剩余2条评论
2个回答

37

好的,看起来启用紧凑字距在iOS 5和6上有不同的结果。我实在无法解释为什么会有这种差异,但是关闭此功能可以使标签居中对齐。我把这个答案留在这里,以防其他人犯同样的愚蠢错误。

例如:

    lbl.adjustsLetterSpacingToFitWidth = NO;

请注意,此功能在iOS 7.0中已被弃用。


7
在iOS6上确认:如果启用了紧凑字距,则NSTextAlignmentCenter无效。 - Felix Lamouroux
哦,太感谢了!我已经为此苦恼了几天!没想到“紧缩”会有这种不良副作用! - Jean
1
如果紧缩字距开启,iOS6 上的 NSTextAlignmentANYTHING 似乎无法正常工作。谢谢您的答案!帮了我大忙(已点赞)。 - chadbag
非常感谢!你刚刚拯救了我的大脑不会炸裂! - tonytony
1
谢谢!你救了我的一天!顺便说一句,在iOS 7中一切都正常工作。这只是iOS 6的问题。 - Dennis Pashkov
显示剩余3条评论

-2

iOS 6或更高版本:

label.textAlignment = NSTextAlignmentLeft;

4
如何将其设置到左侧。这与原帖作者的请求相反。 - tooluser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接