user4951
user4951

Reputation: 33050

How to change the Title View of the navigation bar into some Custom View and fill the original size

I want to change the titleView of navigationBar with a regular text field. Then I want to set the textField size to fill the old "normal" titleView.

I can't seem to be able to do this in storyBoard. Dragging a text Field to the place where the navigation title View is doesn't work.

So I added stuff at

-(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);
...

It's working with one cached. That PO is a macro that print the content of the object. Turns out at viewDidAppear, self.navigationItem.titleView is null.

So while I can display the searchBar, I cannot make the searchBar "fill" it's space because I do not know the space is.

I prefer not to hard code it because you know, things may change in the future.

So what should I do?

I once saw codes where rather than setting the self.navigationItem.titleView, you would simply add subview to it. The problem with this approach even on viewDidAppear, self.navigationItem.titleView is 0.

I added these codes:

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

And, I do not know how to nslog structure value, however, theFrame and theFrame3 are all 0

Upvotes: 2

Views: 5358

Answers (1)

Neo
Neo

Reputation: 2807

You can try this inside 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;

Upvotes: 2

Related Questions