以编程方式将search栏放在导航栏中

我正在尝试使用以下代码在导航栏中放置search栏:

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(-5.0, 0.0, 320.0, 44.0)]; searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth; UIView *searchBarView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 310.0, 44.0)]; searchBarView.autoresizingMask = 0; searchBar.delegate = self; [searchBarView addSubview:searchBar]; self.navigationItem.titleView = searchBarView; 

它确实将search栏放在导航栏中,但不包括任何一边的button。 它也没有取消选项。

在这里输入图像说明

我宁愿看起来像这样:

在这里输入图像说明

任何人都可以build议如何调整上述代码来做到这一点?

在此先感谢您的任何build议。

在我的一个项目中,我使用下面的代码做了同样的事情,希望它能帮助你:

 -(void)addSearchBar{ self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(35, -10, 285, 64)]; self.navigationItem.rightBarButtonItems=nil; [self.searchBar setShowsCancelButton:YES]; for (id subView in ((UIView *)[self.searchBar.subviews objectAtIndex:0]).subviews) { NSLog(@"subView====%@", subView); if ([subView isKindOfClass:[UITextField class]]) { UITextField *textField = subView; textField.keyboardAppearance = UIKeyboardAppearanceAlert; break; } if([subView isKindOfClass:[UIButton class]]){ UIButton* cancelBtn = (UIButton*)subView; cancelBtn.frame=CGRectMake(cancelBtn.frame.origin.x, cancelBtn.frame.origin.x, 30, 30); [cancelBtn setTitle:@"" forState:UIControlStateNormal]; [cancelBtn setImage:[UIImage imageNamed:@"btn_cancel_h.png"] forState:UIControlStateNormal]; [cancelBtn setEnabled:YES]; } } [[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]]; self.searchBar.delegate=self; [self.navigationController.navigationBar addSubview:self.searchBar]; }