tableView에 기본적으로 숨겨져있는 searchBar를 갖고 싶지만 사용자가 아래로 당길 경우 검색 바가 나타납니다.tableView searchBar를 숨기려면 어떻게해야합니까?
그래서 다음 코드를 사용하여 구현했지만보기가 처음 표시 될 때 searchBar가 일시적으로 표시되며이 간단한 플래시는 피하고 싶습니다. self.tableView.contentOffset = CGPointMake(0, 0)
메서드를 viewDidLoad()
메서드에 추가해도 아무런 영향이 없습니다. tableView는 네비게이션 컨트롤러 뒤에 있으므로 Y 오프셋을 0으로 설정하면 탐색 표시 줄 뒤에 searchBar가 효과적으로 숨겨집니다. view가 먼저 표시 될 때 tableView의 headerView가 숨겨 지는지 확인하는 방법에 대한 아이디어.
간단히 headerView를 제거하는 것으로 생각했지만 사용자는 아래로 드래그하여 액세스 할 수 없습니다.
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
searchBar.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 44)
if let tv = self.tableView {
if let headerView = tv.tableHeaderView {
headerView.addSubview(searchBar)
} else {
FLOG("No table header view is available so create one!")
let headerView = UIView()
let width: CGFloat = tv.frame.size.width
headerView.frame = CGRectMake(0, 0, width, 44);
tv.tableHeaderView = headerView
tv.tableHeaderView!.addSubview(searchBar)
}
}
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
dispatch_after(0, dispatch_get_main_queue()) {
self.tableView.contentOffset = CGPointMake(0, 0)
}
}
감사하지만 'viewWillAppear'에서 'contentOffset'을 호출하면 직접 작동하지 않습니다. 나는 그들이 '파견'을 사용하여 일하는 또 다른 게시물을 발견했습니다. 이것은 iOS8.x의 새로운 동작입니다. 곧 다른 제안을 살펴 보겠습니다. –
당신은 'viewDidLoad'가 한 번 호출되면 뷰가 표시 될 때마다 'viewWillAppear'가 호출된다는 점에서 정확합니다. –
또한 headerView에 다른 뷰를 추가하는 것을 잊어 버렸습니다. 그래서 searchBar 자체를 사용하지 않습니다. 그러나 이것은 디스플레이에 영향을주지 않습니다. –