iOS 8.0에서는 셀 및 테이블보기에 layoutMargins 속성이 도입되었습니다.
이 속성은 iOS 7.0에서 사용할 수 없으므로 할당하기 전에 확인해야합니다!
쉬운 수정은 셀을 서브 클래 싱하고 @ user3570727에서 제안한대로 레이아웃 여백 속성을 재정의하는 것입니다. 그러나 안전 영역에서 여백을 상속하는 것과 같은 시스템 동작이 손실되므로 아래 해결책을 권장하지 않습니다.
(목표 C)
-(UIEdgeInsets)layoutMargins {
return UIEdgeInsetsZero // override any margins inc. safe area
}
(빠른 4.2) :
override var layoutMargins: UIEdgeInsets { get { return .zero } set { } }
속성을 무시하지 않거나 조건부로 설정해야하는 경우 계속 읽으십시오.
layoutMargins
속성 외에도 Apple은 셀에 속성 을 추가 하여 테이블 뷰의 여백 설정을 상속하지 못하게합니다. 이 특성을 설정하면 셀이 테이블보기와 독립적으로 자체 여백을 구성 할 수 있습니다. 그것을 재정의로 생각하십시오.
이 속성이라고 preservesSuperviewLayoutMargins
하고, 그것을 설정하면 NO
셀의 수 layoutMargin
대로 재정의 설정을 layoutMargin
사용자의 TableView에 설정됩니다. 둘 다 시간을 절약 하고 (테이블 뷰의 설정을 수정할 필요가 없음 ) 더 간결합니다. 자세한 설명은 Mike Abdullah의 답변을 참조하십시오.
참고 : 다음은 Mike Abdullah의 답변에 표시된 것처럼 셀 수준 여백 설정에 대한 깨끗한 구현입니다 . 셀을 설정하면 preservesSuperviewLayoutMargins=NO
테이블 뷰가 셀 설정을 무시하지 않습니다. 실제로 전체 테이블 뷰가 일정한 마진을 갖기를 원한다면 이에 따라 코드를 조정하십시오.
셀 여백을 설정하십시오.
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
스위프트 4 :
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// Remove seperator inset
if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
cell.separatorInset = .zero
}
// Prevent the cell from inheriting the Table View's margin settings
if cell.responds(to: #selector(setter: UITableViewCell.preservesSuperviewLayoutMargins)) {
cell.preservesSuperviewLayoutMargins = false
}
// Explictly set your cell's layout margins
if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) {
cell.layoutMargins = .zero
}
}
설정 preservesSuperviewLayoutMargins
NO로 셀 재산은 해야 휴대 여백을 무시에서 테이블보기를 방지합니다. 경우에 따라 제대로 작동하지 않는 것 같습니다.
모두 실패하면 테이블 뷰 여백을 무차별하게 적용 할 수 있습니다.
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Force your tableview margins (this may be a bad idea)
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
스위프트 4 :
func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Force your tableview margins (this may be a bad idea)
if tableView.responds(to: #selector(setter: UITableView.separatorInset)) {
tableView.separatorInset = .zero
}
if tableView.responds(to: #selector(setter: UITableView.layoutMargins)) {
tableView.layoutMargins = .zero
}
}
... 그리고 당신은 간다! iOS 7 및 8에서 작동합니다.
편집 : 모하메드 살레 내 관심을 아이폰 OS 9에서 가능한 변화를 가져왔다 당신은 테이블보기의 설정해야 할 수도 있습니다 cellLayoutMarginsFollowReadableWidth
에를NO
당신이 세트 또는 여백을 사용자 정의하려는 경우입니다. 마일리지가 다를 수 있지만이 문서는 잘 설명되어 있지 않습니다.
이 속성은 iOS 9에만 존재하므로 설정하기 전에 확인하십시오.
if([myTableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)])
{
myTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
스위프트 4 :
if myTableView.responds(to: #selector(setter: self.cellLayoutMarginsFollowReadableWidth)) {
myTableView.cellLayoutMarginsFollowReadableWidth = false
}
( iOS 8 UITableView 구분 기호 삽입 0 코드가 작동하지 않음 )
편집 : 다음은 순수한 인터페이스 빌더 접근법입니다.
참고 : iOS 11 은이 동작의 많은 부분을 변경하고 단순화합니다. 업데이트가 곧 나올 것입니다 ...