UITableView 콘텐츠 삽입을 영구적으로 설정
내 앱에는 UISearchBar
언더가 UINavigationBar
있으므로 항상 사용자에게 표시됩니다. 이 경우 contentInset
44px를 추가 로 설정 해야 했으므로 UIScrollView
아래로 스크롤됩니다 UISearchBar
(Contacts.app에서와 동일) . 그리고 static UITableView
의 경우에는 문제가 없지만 제 경우에는 내용을 다시로드하고 UISearchDisplayController
등으로 전환해야합니다 . 그래서 호출 할 때 :
[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];
예를 들어 당겨서 새로 고칠 때까지 모든 것이 작동합니다 ... (이를 위해 SSPullToRefresh
).
그래서 내 질문은 : 어떻게 contentInset
영구적으로 설정 하여 내부 데이터의 변경 사항에 대해 걱정할 필요가 UITableView
없습니까?
아마도 자동 레이아웃과 스토리 보드를 엉망으로 만들었 기 때문에 일종의 내 실수 였을 것입니다.하지만 답을 찾았습니다.
View Controller의 Attribute Inspector 에서이 작은 녀석을 돌봐야합니다.
contentInset
변경 후 기본값 이 설정 되지 않도록 선택 취소해야합니다 . 그 후 다음과 같이 한 줄만 추가하면됩니다 viewDidLoad
.
[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; // 108 is only example
iOS 11, Xcode 9 업데이트
iOS 11 및 Xcode 9의 경우 이전 솔루션이 더 이상 올바른 솔루션이 아닌 것 같습니다 . automaticallyAdjustsScrollViewInsets
더 이상 사용되지 않으며 지금 비슷한 효과를 얻으려면 Size Inspector 로 이동하여 다음을 찾을 수 있습니다. 또한 코드에서 동일한 결과를 얻을 수 있습니다.
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
Swift에서 :
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.contentInset = UIEdgeInsets(top: 108, left: 0, bottom: 0, right: 0)
}
automaticAdjustsScrollViewInsets는 iOS11에서 더 이상 사용되지 않으며 허용되는 솔루션은 더 이상 작동하지 않습니다. 사용하다:
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
numberOfRowsInSection에 코드를 추가합니다 [self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];
. 따라서 contentInset을 설정하면 항상 테이블에 데이터를 다시로드합니다.
한 시간의 테스트 후 100 % 작동하는 유일한 방법은 다음과 같습니다.
-(void)hideSearchBar
{
if([self.tableSearchBar.text length]<=0 && !self.tableSearchBar.isFirstResponder)
{
self.tableView.contentOffset = CGPointMake(0, self.tableSearchBar.bounds.size.height);
self.edgesForExtendedLayout = UIRectEdgeBottom;
}
}
-(void)viewDidLayoutSubviews
{
[self hideSearchBar];
}
이 방법을 사용하면 비어있는 경우 항상 검색 창을 숨길 수 있습니다.
Storyboard (iOS 11 및 Xcode 9.1)를 통해 쉽게 수정할 수있는 방법은 다음과 같습니다.
표보기> 크기 검사기> 내용 삽입 : 안 함을 선택합니다.
tableFooterView tableView.tableFooterView = UIView (frame : CGRect (x : 0, y : 0, width : 0, height : CGFloat.leastNonzeroMagnitude))를 설정해보세요.
참고 URL : https://stackoverflow.com/questions/22020943/set-uitableview-content-inset-permanently
'Programing' 카테고리의 다른 글
Perl에서 "0 but true"는 무엇을 의미합니까? (0) | 2020.11.29 |
---|---|
제목에 대한 UIImage가있는 탐색 모음 (0) | 2020.11.29 |
출력을 위해 줄 번호를 추가하고 줄을 묻고 입력에 따라 행동하는 방법은 무엇입니까? (0) | 2020.11.29 |
Dict 목록에서 공통 Dict 필드의 min () 값을 찾습니다. (0) | 2020.11.29 |
shouldAutorotateToInterfaceOrientation이 iOS 6에서 호출되지 않음 (0) | 2020.11.29 |