2015-09-15 3 views
0

Мне нужно поместить UITextField в UINavigationItem и взять его на всю ширину за вычетом полей. Я устанавливаю TitleView в NavigationItem, но не могу найти способ получить всю ширину. Я пробовал использовать this.NavigationItem.SizeToFit(), но это просто уменьшает ширину, чтобы соответствовать контенту. Я также попытался вручную установить ширину, но это решение не работает, когда я вращаюсь или когда есть левый или правый BarButtonItem ... Есть ли способ автоматически настроить ширину заголовка, чтобы взять все оставшиеся пространства без использования ограничений? Я пытался использовать ограничения, но получаю предупреждения о конфликтующих ограничениях.iOS UITextField в UINavigationItem

Примечание: Я использую Xamarin в C#, но решение в Objective-C в порядке.

ответ

0

Вы можете установить свой кадр что-то вроде этого работал для меня

CGFloat margin = 20; 
UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width - (2* margin), 21.0)]; 
self.navigationItem.titleView = textField; 

Edit:

Вам необходимо обновить рамку на поворот, вы можете сделать это в viewDidLayoutSubView и установить рамку на обновленной ширине ,

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    CGFloat margin = 20; 
    self.textFi[![enter image description here][1]][1]eld.frame = CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width - (2* margin), 21.0) 
} 

Или добавить Auto ограничения макета и пин-код texField в superView от левой и правой, и Автокомпоновки будет обрабатывать вращение для вас.

Ниже приведены снимки экрана в обоих ориентации с лево право пункта навигации

enter image description here enter image description here

+0

Это хорошо, но он не работает при повороте или когда у меня есть другие элементы в NavigationItem –

+0

Вы можете обновить свой фрейм в viewDidLayoutSubView или использовать автоматическую раскладку, обновил мой ответ –

+0

Хорошо, теперь я до сих пор не» я знаю, что делать, когда у меня есть что-то в LeftBarButtonItem! Я мог бы получить эту ширину, делать умножения и прочее, но мне кажется, что это должен быть способ сделать это автоматически ... –

0

Try с этим.

- (void)viewDidLoad { 
[super viewDidLoad]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarOrientationChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; 
[self statusBarOrientationChange:nil]; 
} 

- (void)statusBarOrientationChange:(NSNotification *)notification { 
CGRect frame = self.navigationController.navigationBar.frame; 
UITextField *textField = [[UITextField alloc]initWithFrame:frame]; 
self.navigationItem.titleView = textField; 
textField.backgroundColor = [UIColor redColor]; 
}