创建自定义视图并将其分配给navigationItem.titleView属性后,它将显示为
自定义视图填充两个按钮之间的空间。因此,自定义视图不在导航栏的中心。如何确定.titleView属性中的视图框架?我想在导航栏中居中显示一些文字,比如在时间戳下。
答案 0 :(得分:14)
如果你真的想要获得titleView
的框架(在顶级视图的坐标空间中),你可以这样做:
[self.navBar layoutIfNeeded];
CGRect titleViewFrameInTopLevelViewSpace = [self.navigationItem.titleView
convertRect:self.navigationItem.titleView.bounds
toView:self.view];
如果您刚刚分配了layoutIfNeeded
,则需要执行titleView
,因为默认情况下,导航栏在下一次运行循环之前不会布置其子视图。
那就是说, titleView
会自动居中,如果适合的话。我认为您将自定义视图的框架(或边界)设置得太大。我测试了这两种方式:
我直接在XIB中设置了titleView
。我只是将一个View从Object库拖到导航栏的中心:
它自动将视图调整为128x33。调整大小手柄让我调整大小。它保持居中,直到它与Categorize按钮重叠。然后它向左移动。
我在titleView
中设置了viewDidLoad
属性:
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 33)];
customView.backgroundColor = [UIColor greenColor];
self.navItem.titleView = customView;
}
结果如下:
答案 1 :(得分:2)
您可以在设置leftBarButtonItem
和rightBarButtonItem
后获得宽度,然后使用它来确定如何在您提供给titleView
的视图中居中。那可能会做你想要的?