Проблемы макета UISearchBar (iOS 8)

Я делаю то, что должно быть простым изменением в приложении, чтобы добавить UISearchBar компонент, но я получаю довольно странные особенности макета в пользовательском интерфейсе. Возможно, это проще проиллюстрировать, используя картинки.

Вот как выглядит компонент, когда у него нет фокуса:

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"]];

Последнее, чтобы показать значок на левой стороне, используйте изображение для этого.

Другие вопросы по тегам