代码如下所示:
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的中心。
我做错了什么?
答案 0 :(得分:0)
所以这就是出了什么问题:
self.navigationItem.titleView = customTitleView;
当您将customTitleView
设置为导航项的标题视图时,customTitleView
的框架将会更改。 customTitleView
不再是320像素宽,但titleLabel
的框架将保持不变。因此它将不再居中。
您不能将titleLabel
设为titleView
吗?我认为它应该自动居中。如果没有,我知道一种更复杂的解决方法。发表评论,我会告诉你如何。
编辑:以下是titleLabel
框架更改后customTitleView
的重新对齐方式。
当视图的帧更改时,在该视图上调用layoutSubviews
。因此,不要让customTitleView
成为常规UIView
,而是需要将其作为继承自UIView
的自定义视图。在该自定义视图中,您覆盖layoutSubviews
,在layoutSubviews
的实现中,您可以确保所有内容都根据新框架(self.frame
)按照您想要的方式对齐。我会把实现留给你。