如何确定自定义UINavigationItem.titleView的大小/框架?

时间:2011-11-27 18:24:52

标签: objective-c xcode uinavigationbar uinavigationitem

创建自定义视图并将其分配给navigationItem.titleView属性后,它将显示为

enter image description here

自定义视图填充两个按钮之间的空间。因此,自定义视图不在导航栏的中心。如何确定.titleView属性中的视图框架?我想在导航栏中居中显示一些文字,比如在时间戳下。

2 个答案:

答案 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库拖到导航栏的中心:
    XIB screen shot
    它自动将视图调整为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;
     }
    

    结果如下:
    Simulator screen shot

答案 1 :(得分:2)

您可以在设置leftBarButtonItemrightBarButtonItem后获得宽度,然后使用它来确定如何在您提供给titleView的视图中居中。那可能会做你想要的?