2014-10-01 3 views
1

У меня есть класс UIViewController, который содержит UITableView. В заголовке табличного представления у меня есть UIToolbar, содержащий, среди прочего, UISearchBar. В iOS8, когда я нажимаю на строку поиска для поиска, контроллер отображения поиска анимирует панель в верхней части экрана, как ожидалось, но панель поиска не имеет поля в левой части.iOS8 UISearchBar в UIToolbar не имеет левой прокладки

Наиболее урезанная кода, воспроизводящий выглядит следующим образом:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, [self tableView].frame.size.width, 44.0)]; 

    if ([toolbar respondsToSelector:@selector(setBarTintColor:)]) { 
     [toolbar setBarTintColor:[UIColor lightGrayColor]]; 
    } 

    [[self tableView] setTableHeaderView:toolbar]; 

    UIView *searchBarView = [[UIView alloc] initWithFrame:[[[self searchDisplayController] searchBar] frame]]; 

    [[[self searchDisplayController] searchBar] setBackgroundImage:[[UIImage alloc] init]]; 
    [searchBarView addSubview:[[self searchDisplayController] searchBar]]; 
    [[[self searchDisplayController] searchBar] setText:@""]; 
    UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBarView]; 

    [toolbar setItems:@[searchBarItem]]; 
} 

Любая помощь/предложения высоко оценили.

Edit: Это работает правильно прошивкой 6.1 и 7,0/1

ответ

0

Это, кажется, ошибка iOS8. Вы можете использовать временное решение от this

В принципе, вы можете создать подкласс UIToolbar. Тогда в подклассе вы только что создали, добавьте этот код, чтобы добавить недостающую площадь:

#define DEFAULT_APPLE_PADDING 20.0f 
-(void)layoutSubviews{ 
    [super layoutSubviews]; 
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { 
     if ([NSStringFromClass(view.class) hasPrefix:@"UIToolbar"] && 
      [NSStringFromClass(view.class) hasSuffix:@"Button"]) { 
      CGRect buttonFrame = view.frame; 

      if (buttonFrame.origin.x == 0) { 
       buttonFrame.origin.x = DEFAULT_APPLE_PADDING; 
      } else if (buttonFrame.origin.x + buttonFrame.size.width == self.bounds.size.width) { 
       buttonFrame.origin.x -= DEFAULT_APPLE_PADDING; 
      } 

      view.frame = buttonFrame; 
     } 
    }]; 
} 
+0

ответы со ссылками на внешние ссылки только устареет, если эти ссылки не работают. Пожалуйста, укажите некоторые описания и коды о том, как контент в вашей ссылке поможет ответить на вопрос OP. –

Смежные вопросы