UILabel 的 NSTextAlignmentCenter 不起作用

NSTextAlignmentCenter for UILabel not working

我在单独的 nib 文件中有一个带有 UILabel 的视图。我在 UIViewControllerviewWillAppear: 方法中加载了这个 nib 文件,我试图设置 UILabeltextAlignment 属性那里,这样:

- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];

   NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
        for (UIView *view in views) {
            if([view isKindOfClass:[UIView class]])
            {
                self.customView = (MyView *)view;

                ((MyView *)self.customView).myLabel.textAlignment = NSTextAlignmentCenter;

                ((MyView *)self.customView).myLabel.text = @"My text";
                [((MyView *)self.customView).myLabel sizeToFit];

                [self.view addSubview:self.customView];
            }
        }
}

但是当我 运行 应用程序时,文本没有居中,即使我在 nib 中设置了对齐方式(我可以看到文本在 Xcode 中居中IB)。这是适用于 iOS 7+ 的应用程序,我使用的是 Xcode 6.1.1。为什么这不起作用?

谢谢

  [((MyView *)self.customView).myLabel sizeToFit];

删除这一行...

我想问题出在:

[((MyView *)self.customView).myLabel sizeToFit];

居中不会更改标签的 frame.origin.x。 但是,如果您之后应用 sizeToFit,所有内容将集中在一个较小的区域(不更改 x 偏移量)并且会感觉它不再居中。

您正在调用 [((MyView *)self.customView).myLabel sizeToFit]; 并且来自文档 sizeToFit "Resizes and moves the receiver view so it just encloses its subviews."。

如果文本填满标签,您应该无法将文本居中 UILabel

尝试删除此方法调用,看看会发生什么。

写这行代码

((MyView *)self.customView).myLabel.textAlignment = NSTextAlignmentCenter;

在这个之后

[self.view addSubview:self.customView];

对于带有 NSTextAlignmentCenter 的 UILabel,之后您可以像这样将标签居中:

float w = self.view.frame.size.width;

title.text = @"What do you want to say?";

[title sizeToFit];

title.frame = CGRectMake((w-title.frame.size.width)/2, title.frame.origin.y, title.frame.size.width, title.frame.size.height);