Programing

UITableView 콘텐츠 삽입을 영구적으로 설정

lottogame 2020. 11. 29. 09:31
반응형

UITableView 콘텐츠 삽입을 영구적으로 설정


내 앱에는 UISearchBar언더가 UINavigationBar있으므로 항상 사용자에게 표시됩니다. 이 경우 contentInset44px를 추가 로 설정 해야 했으므로 UIScrollView아래로 스크롤됩니다 UISearchBar (Contacts.app에서와 동일) . 그리고 static UITableView경우에는 문제가 없지만 제 경우에는 내용을 다시로드하고 UISearchDisplayController등으로 전환해야합니다 . 그래서 호출 할 때 :

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];

예를 들어 당겨서 새로 고칠 때까지 모든 것이 작동합니다 ... (이를 위해 SSPullToRefresh).

그래서 내 질문은 : 어떻게 contentInset영구적으로 설정 하여 내부 데이터의 변경 사항에 대해 걱정할 필요가 UITableView없습니까?


아마도 자동 레이아웃과 스토리 보드를 엉망으로 만들었 기 때문에 일종의 내 실수 였을 것입니다.하지만 답을 찾았습니다.

View Controller의 Attribute Inspector 에서이 작은 녀석을 돌봐야합니다.asvi

contentInset변경 후 기본값 이 설정 되지 않도록 선택 취소해야합니다 . 그 후 다음과 같이 한 줄만 추가하면됩니다 viewDidLoad.

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; // 108 is only example

iOS 11, Xcode 9 업데이트

iOS 11Xcode 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

반응형