iOS7부터 UITableView
스타일 상단에 추가 공간 이 있습니다 UITableViewStyleGrouped
.
예를 들면 다음과 같습니다.
tableview는 첫 번째 화살표에서 시작하고 설명 할 수없는 패딩이 35 픽셀이며 녹색 머리글이 UIView
반환됩니다 viewForHeaderInSection
(여기서 섹션은 0 임).
이 35 픽셀 양의 출처와 전환하지 않고 어떻게 제거 할 수 UITableViewStylePlain
있습니까?
노트 :
iOS 11 이상에서 :
tableView.contentInsetAdjustmentBehavior = .never
답변
답변
나는 그것을 조금 더 가지고 놀았고 이것이 tableView ‘s 설정의 부작용 인 것처럼 보입니다 tableHeaderView = nil
.
내 tableView는 동적으로 나타나기 때문에을 tableHeaderView
숨기는 tableHeaderView
대신 을 숨길 필요 self.tableView.tableHeaderView = nil;
가 있습니다.
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];
동적으로도 contentInset.top
사용하기 때문에 다소 임의의 설정 보다이 솔루션이 더 좋습니다 contentInset.top
. 다시 계산할 때마다 35px를 추가로 제거해야한다는 contentInset.top
것은 지루합니다.
답변
IOS 7의 경우 뷰 컨트롤러에 테이블 뷰를 할당하는 경우
self.edgesForExtendedLayout = UIRectEdgeNone;
너의 문제는 내 것과 비슷해 보였다
최신 정보:
iOS 9.x의 스위프트 :
self.edgesForExtendedLayout = UIRectEdge.None
스위프트 3 :
self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)
답변
에서 상속되는 contentInset
속성을 변경해보십시오 .UITableView
UIScrollView
self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
해결 방법이지만 작동합니다.
답변
self.automaticallyAdjustsScrollViewInsets = NO;
시도, 당신은 그것을 다룰 수 있습니다!
답변
앱이 iOS7 이상을 실행 중인지 감지하고이 두 가지 메소드를 테이블보기 대리자 (일반적으로 UIViewController 코드)에 추가 할 수 있습니다.
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
이것은 아마도 우아한 해결책은 아니지만 나를 위해 일합니다.
스위프트 버전 :
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
답변
내 원래 버그의 원인을 발견하고이를 보여주는 샘플 프로젝트를 만들었습니다. iOS7 버그가 있다고 생각합니다.
iOS7부터 Grouped 스타일로 UITableView를 만들지 만 첫 번째 레이아웃에 대리자가 설정되어 있지 않으면 대리자를 설정하고 reloadData를 호출하면 맨 위에 35px의 공간이 없어지지 않습니다.
내가 버그를 보여준이 프로젝트를보십시오 : https://github.com/esilverberg/TableViewDelayedDelegateBug
구체적 으로이 파일 : https://github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m
24 행이 활성화되면
[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];
맨 위에 35 픽셀의 공간이 추가로 생깁니다. 27 행이 활성화되어 있고 24 행이 주석 처리 된 경우
self.tableView.delegate = self;
상단에 공간이 없습니다. tableView가 결과를 어딘가에 캐시하고 대리자가 설정되고 reloadData가 호출 된 후 자체적으로 다시 그려지지 않는 것과 같습니다.