programing

UI 테이블 뷰에서 횡단면 사이의 공간

telecom 2023. 9. 2. 07:59
반응형

UI 테이블 뷰에서 횡단면 사이의 공간

두 섹션 사이의 공간을 줄여야 합니다.UITableView 질문을 살펴보았지만 바닥글과 머리글의 공간이 결합되어 있기 때문에 솔루션에서 사용자 지정 머리글 보기를 허용하지 않습니다.

여기 사진이 있습니다.UITableView검은색은.UITableView배경색

tableview screenshot

iOS 15에서는 섹션을 축소할 수 있습니다.머리글 맨 위 패딩

if #available(iOS 15.0, *) {
    tableView.sectionHeaderTopPadding = 0
}

이 기능을 재정의하려고 했습니까?

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

스토리보드나 XIB에서 바닥글 보기 높이를 최소로 조정하면 해결할 수 있을 것 같습니다.enter image description here

저는 당신이 바닥글 높이에 대해 당신의 코드에 무엇을 썼는지 모릅니다.제가 틀렸다면 죄송합니다.

UI 테이블 보기에서 바닥글 보기 숨기기 복제 가능성

Swift 4+의 경우 이 두 가지 방법을 구현해야 합니다.

extension MyViewController : UITableViewDelegate {

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return CGFloat.leastNormalMagnitude
    }

    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }

}

스위프트 3용

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

Swift 5+의 경우:

기본적으로 머리글과 바닥글을 위한 공간이 있습니다.그것이 제가 섹션의 정확한 분리를 설정하는 데 문제가 있었던 이유입니다.

두 섹션을 분리하는 방법은 다음과 같습니다.

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return 24
    } else if section == 1 {
        return 32
    } else {
        return 40
    }
}
    
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    nil
}
    
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    nil
}
    
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    CGFloat.leastNormalMagnitude
}

ViewForFooterInSection 및 ViewForHeaderInSection에서 볼 수 있듯이 0을 반환해야 했습니다.

바닥글만 변경하려는 경우높이, CGFloat.HeaderInSection의 높이에 대한 최소 Normal Aziginance를 반환하고 FooterInSection의 높이에 대한 각 섹션의 높이를 반환합니다.

이카로가 올린 답변과 함께 당신도 구현해야 한다는 것을 추가하고 싶습니다.tableView:viewForFooterInSection:메서드 반환nil아래 빈 공간을 제거할 섹션의 경우 다음과 같이 됩니다.

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.001f;
}

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}

방법을 사용해야 합니다.heightForHeaderInSection헤더와 셀 텍스트 사이의 공간을 정의합니다.다른 섹션에 따라 변경할 수도 있습니다. 예를 들어 일부 섹션에서는 더 많은 거리를 표시해야 할 수도 있고 일부 섹션에서는 간격을 표시하지 않을 수도 있습니다.이러한 경우 사용할 수 있습니다.CGFLOAT_MIN0.000001f입니다.예를 들어, 다른 헤더 높이로 다른 섹션을 사용하는 방법을 설명합니다.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 || section == 2)
    {
        return 55.0;
    }
    else
    {
        return CGFLOAT_MIN;
    }
}

테이블 뷰 섹션 헤더의 맨 위 패딩을 줄이기만 하면 되었습니다.

tableView.sectionHeaderTopPadding = 0

TableViewDelegate 메서드는 float 값이 0.0f일 때 적용되지 않습니다.그보다 더 큰 값을 지정해 보십시오.

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.00001f;
}

- (UIView*)tableView:(UITableView*)tableView
viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

이는 다음에도 도움이 될 수 있습니다.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.sectionHeaderHeight = UITableViewAutomaticDimension
}

다음을 선택합니다.tableView스토리보드/객체코드에서 스타일이 다음으로 설정되었는지 확인합니다.PlainGrouped이 설정은 "Inspector" 특성 탭에서 확인할 수 있습니다.

let myTableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.register(TableCellClass.self, forCellReuseIdentifier: "cellId")
        tableView.backgroundColor = UIColor(red: 123/255, green: 190/255, blue: 120/255, alpha: 1)
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

구현하기보다는UITableViewDelegate섹션 : 를 통한 높이:CGFloat.leastNormalMagnitude또는 정당하게 할 수 있습니다.

tableView.sectionFooterHeight = 0

바닥글이 없는 동안 섹션 사이의 간격이 사라집니다.

메커니즘은 으로 이 이 " 메니기은으이로값다같설다정니이됩음과이이본적즘커다"로 설정되어 있다는 입니다.UITableView.automaticDimension.

하는 한은

  • 그것은 남습니다UITableView.automaticDimension
  • 바닥글 구성을 구현하는 대리자/데이터소스 메서드가 없습니다.titleForFooterInSection/viewForFooterInSection
  • 테이블 뷰의 스타일이 다음으로 설정됨.grouped

그러면 UITableView가 뷰가 없는 섹션 사이에 의도적으로 간격을 삽입합니다.

당신은 변합니다.sectionFooterHeight0까지, 마법은 사라집니다.

Xcode 13.2에서는 스토리보드에서 섹션의 머리글 및 바닥글 높이를 조정할 수 있습니다. 아래 스크린샷을 참조하십시오.

Height of Header and Footer of Sections in Xcode 13.2

를 구현하면 됩니다.heightForHeaderInSection&heightForFooterInSection.

은 Section 0 안면섹 됩니다션환반값(이라도 0이 는 안 . 섹션의 높이입니다. 값이 합니다. 사용해 보십시오. 매우 작은 값이 필요합니다. 시도해 보십시오.CGFLOAT_MIN.

예를 들어,

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == [self.dataArray indexOfObject:self.bannerList]) {
    return 46;
}
return CGFLOAT_MIN;

}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
} 

나를 위해 일하세요.

tableView.sectionFooterHeight = 10
// ...

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

swift 5 iOS 15

self.tableView.estimatedSectionFooterHeight = 16.0 // spacing between Sections

UITableView 맨 위에 있는 첫 번째 셀에만 간격이 필요하고 스크롤 후 머리글 섹션에 공백이 없어야 하는 경우,contentInsets.top수행:

간격을 조정하여 가짜를 추가합니다.height그리고 그것을 에 놓습니다.

다음은 SnapKit 사용 방법입니다.

let spaceView = UIView()
spaceView.snp.makeConstraints {
    $0.height.equalTo(10)
}
    
tableView?.tableHeaderView = spaceView

tableHeaderView 않아 에는 고정되상않이경지, 때의간격우의 맨 .tableView▁▁be 될 것입니다.10 스크롤한 tableView위쪽의 간격은 사라지고 위쪽의 간격만 유지됩니다.

이것은 iOS 15 이상에서 작동할 것입니다.

if #available(iOS 15.0, *) {
    tableView.sectionHeaderTopPadding = 0
}

헤더 섹션이 여러 개인 경우 헤더와 셀 사이의 자동 공간이 줄어듭니다.

모든 것을 시도했지만 설정 섹션으로 수정되었습니다.머리글 맨 위에 0으로 패딩합니다.이 기능은 15.0 이후에만 사용할 수 있습니다.

tableView.sectionHeaderTopPadding = 0.0

문서 링크

언급URL : https://stackoverflow.com/questions/30364067/space-between-sections-in-uitableview

반응형