如何将导航栏的标题视图更改为某些自定义视图并填充原始大小

时间:2012-10-09 04:44:17

标签: objective-c uinavigationcontroller uinavigationbar xcode4.5

我想用常规文本字段更改navigationBar的titleView。然后我想设置textField大小来填充旧的“普通”titleView。

我似乎无法在storyBoard中执行此操作。将文本字段拖动到导航标题View所在的位置不起作用。

所以我在

添加了东西
-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    PO(self.navigationItem.titleView);
    CGRect theFrame= self.navigationItem.titleView.frame;
    self.navigationItem.titleView=self.searchBar;
    //self.searchBar.frame = theFrame;
    while (false);
...

它正在使用一个缓存。该PO是打印对象内容的宏。原来在viewDidAppear,self.navigationItem.titleView为null。

因此,虽然我可以显示searchBar,但我不能让searchBar“填充”它的空间,因为我不知道空间是什么。

我不想硬编码,因为你知道,将来可能会发生变化。

那我该怎么办?

我曾经看过代码而不是设置self.navigationItem.titleView,你只需要添加子视图。这种方法的问题甚至在viewDidAppear上,self.navigationItem.titleView为0。

我添加了以下代码:

CGRect theFrame= self.navigationItem.titleView.frame;
CGRect theFrame2 = self.searchBar.frame;
CGRect theFrame3 = self.navigationController.navigationItem.titleView.frame;

而且,我不知道如何使用nslog结构值,但是,theFrame和theFrame3都是0

1 个答案:

答案 0 :(得分:2)

您可以在 viewWillAppear:

中尝试此操作
UIView *customTitleView = [[UIView alloc]initWithFrame:CGRectMake((320-210)/2, 0, 210, 50)];
customTitleView.backgroundColor = [UIColor clearColor];

//create your UITextField or UILabel or other view and add as subview of customTitleView

self.navigationItem.titleView = customTitleView;