2014-10-01 6 views
1

UITableView가 포함 된 UIViewController 클래스가 있습니다. 테이블 뷰 헤더에는 UIToolbar가 포함되어 있으며, 다른 것들 중에서도 UISearchBar가 포함되어 있습니다. iOS8에서 검색 막대를 탭하여 검색 할 때 검색 디스플레이 컨트롤러는 예상대로 막대를 화면 맨 위로 움직이게하지만 검색 막대는 왼쪽에 여백이 없습니다.UIToolbar의 iOS8 UISearchBar에는 패딩이 남아 있지 않습니다.

은 가장 다음과 같다 재현 코드 아래로 벗겨 :

- (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]]; 
} 

어떤 도움/제안 크게 감사합니다.

편집 : 이것은 아이폰 OS 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의 질문에 어떻게 도움이되는지에 대한 설명과 코드를 포함하십시오. –