Проблемы макета UISearchBar (iOS 8)
Я делаю то, что должно быть простым изменением в приложении, чтобы добавить UISearchBar
компонент, но я получаю довольно странные особенности макета в пользовательском интерфейсе. Возможно, это проще проиллюстрировать, используя картинки.
Вот как выглядит компонент, когда у него нет фокуса:
Обратите внимание, что значок и текст заполнителя расположены слишком далеко, а текст заполнителя расположен слишком далеко. И вот что происходит, когда я нажимаю на поле:
Значок теперь находится в правильном месте, но текст заполнителя теперь слишком далеко влево и перекрывается значком. Что дает?
Когда поле теряет фокус, оно возвращается к своему первоначальному расположению. Если я сначала не введу в него какой-либо текст, в этом случае он сохранит второй макет.
Код, который я использую для настройки UISearchBar
не делает ничего особенного:
UIView* containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
containerView.backgroundColor = UI_COLOR_NAV_TITLEBAR;
searchField = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, containerView.frame.size.width - 40, 44)];
searchField.placeholder = @"search all items";
searchField.searchBarStyle = UISearchBarStyleMinimal;
searchField.showsBookmarkButton = NO;
searchField.showsCancelButton = NO;
searchField.showsScopeBar = NO;
searchField.showsSearchResultsButton = NO;
UITextField* textSearchField = [searchField valueForKey:@"_searchField"];
searchField.backgroundColor = [UIColor clearColor];
textSearchField.textColor = UI_COLOR_NAV_TEXT;
searchField.delegate = self;
[containerView addSubview:searchField];
//...
Я хочу UISearchBar
всегда отображаться как во втором примере, за исключением того, что текстовое поле не перекрывается значком. Есть ли простое решение этой проблемы, которое я упустил?
1 ответ
Попробуйте следующий код для searchField..
[searchField setLeftViewMode:UITextFieldViewModeNever];
[searchField setRightViewMode:UITextFieldViewModeNever];
[searchField setBackground:[UIImage imageNamed:@"searchicon.png"]];
Последнее, чтобы показать значок на левой стороне, используйте изображение для этого.