UILabel的SetCenter问题

时间:2011-03-22 15:55:52

标签: iphone objective-c uiview uilabel

好吧,我正在努力做这项工作,但没有成功。 基本上我想将UILabel添加到UIView并将其居中。

代码如下所示:

UIView *customTitleView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[customTitleView setBackgroundColor:[UIColor clearColor]];

// Screen title
CGSize constraint = CGSizeMake(200.0, 44.0f);
CGSize size = [screenTitle sizeWithFont:[UIFont boldSystemFontOfSize:20.0] 
                      constrainedToSize:constraint 
                          lineBreakMode:UILineBreakModeCharacterWrap];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, size.width, size.height)];
[titleLabel setText:screenTitle];
[titleLabel setTextColor:[UIColor whiteColor]];
[titleLabel setFont:[UIFont boldSystemFontOfSize:20.0]];
[titleLabel setBackgroundColor:[UIColor clearColor]];

titleLabel.center = customTitleView.center;

[customTitleView addSubview:titleLabel];
[titleLabel release];

self.navigationItem.titleView = customTitleView;
[customTitleView release];  

我预计UILabel会在UIView中居中。 嗯,事实并非如此。它以某种方式正确对齐,甚至不靠近UIView的中心。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

所以这就是出了什么问题:

self.navigationItem.titleView = customTitleView;

当您将customTitleView设置为导航项的标题视图时,customTitleView的框架将会更改。 customTitleView不再是320像素宽,但titleLabel的框架将保持不变。因此它将不再居中。

您不能将titleLabel设为titleView吗?我认为它应该自动居中。如果没有,我知道一种更复杂的解决方法。发表评论,我会告诉你如何。

编辑:以下是titleLabel框架更改后customTitleView的重新对齐方式。

当视图的帧更改时,在该视图上调用layoutSubviews。因此,不要让customTitleView成为常规UIView,而是需要将其作为继承自UIView的自定义视图。在该自定义视图中,您覆盖layoutSubviews,在layoutSubviews的实现中,您可以确保所有内容都根据新框架(self.frame)按照您想要的方式对齐。我会把实现留给你。