programing

UITableView에서 프로토 타입 셀의 왼쪽 여백을 어떻게 조정합니까?

randomtip 2021. 1. 17. 10:51
반응형

UITableView에서 프로토 타입 셀의 왼쪽 여백을 어떻게 조정합니까?


나는를 만드는 경우 UITableViewController를 통해 예를 들어 새 프로젝트 파일 → ... → 아이폰 OS → 마스터 - 세부 응용 프로그램 엑스 코드는, (A)는 UITableView프로토 타입 세포 생성됩니다.

생성 된 뷰 계층은 다음과 같습니다.

UITableViewController보기 계층

왼쪽 "여백"은 아래 주황색으로 표시된 것처럼 Cell의 Content UIView왼쪽 가장자리와 "Title"텍스트 UILabel요소 사이에 자동으로 생성 됩니다.

프로토 타입 세포 간격

그 결과 장치의 화면 가장자리와 UILabel런타임시 텍스트 사이에 해당 여백이 생깁니다.

런타임 차이

그렇다면이 간격 세트의 너비는 어디에 있으며 어떻게 조정할 수 있습니까?

UILabel에 대한 크기 검사기의 컨트롤은 회색으로 표시됩니다.

여기에 이미지 설명 입력

내가 선호하는 옵션은 Interface Builder 내에서이 간격의 너비를 설정할 수있는 것이지만,이 간격이 설정되는 위치와 프로그래밍 방식으로 변경하는 방법도 이해하고 싶습니다.


contentInset테이블보기의 속성 만 설정 하면됩니다. 필요에 따라 값을 설정할 수 있습니다.

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

출력 결과


이동 Main.storyboard> 선택 UITableViewCell> Attributes Inspector. 구분자 드롭 다운 목록을 기본 삽입에서 사용자 정의 삽입으로 변경합니다. 왼쪽 삽입을 15에서 0으로 변경

여기에 이미지 설명 입력


iOS 8 부터는 cell 속성을 사용할 수 있습니다 layoutMargins. 따라서 셀 여백을 조정하는 올바른 방법은 다음 tableView:cellForRowAtIndexPath과 같이 사용자 또는 사용자 정의 에서이 속성을 설정 UITableViewCell하는 것입니다.

override func awakeFromNib() {
    super.awakeFromNib()

    self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right)
    self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset
}

나는 이것이 누군가를 도울 수 있기를 바랍니다.


아래 링크에 언급 된대로 코드에 메서드를 추가하면됩니다.

오른쪽에 간격을 만들지 않고 UITableView의 왼쪽에있는 여백을 제거하려면 어떻게해야합니까?

제가 언급하고 싶은 방법은

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [tableView setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.preservesSuperviewLayoutMargins = NO;
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}

TableView "Attributes inspector"에서 Separator Insets를 Left = 0 인 "Custom"으로 설정하세요.이게 전부입니다!


WTIFS에서 언급했듯이 UITableViewCellindentation속성은 기본 제공 셀 스타일에서 텍스트 레이블을 들여 쓰기하는 좋은 방법입니다. 좋은 왼쪽 여백을 얻으려면 다음과 같이하십시오.

cell.indentationLevel = 2;

그러나 이것은 imageView에서 작동하지 않습니다.


셀에 xib를 사용하는 경우 "여백 기준"이 선택 해제되어 있는지 확인하십시오. 다음 스크린 샷과 같이 검사기를 통해 확인할 수 있습니다.

여기에 이미지 설명 입력


다음은 Chetan의 대답의 빠른 버전입니다.

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
        cell.preservesSuperviewLayoutMargins = false
        cell.layoutMargins = UIEdgeInsets.zero
        cell.separatorInset = UIEdgeInsets.zero
}

그냥 쉬운 해결책을 생각 해낸 것 같아요. 롤.

The top answer have some problem...it decrease the left gap, but resulting a right gap.

I used the constrains in Interface Builder.

First add a -15 left margin constrain to the Table View.

Then add some Indentation to the Table Cell to make the contents look better.


Here're some step-by-step pics:

Add the constraint. Remember to uncheck the "spacing to nearest neighbor".

제약 조건을 추가하십시오.  "가장 가까운 이웃과의 간격"을 선택 취소하십시오.

The Table Cells will move left. But seems too close to margin.

제약을 추가 한 후

So choose the Table Cell, and add some indentation in the right area.

들여 쓰기 추가


그리고 셀의 텍스트 레이블의 왼쪽 여백 만 변경 Horizontal Space Constraint 'Constant'하려면 원하는 패딩에 따라 16 또는 8 로 변경하십시오 (이것은 nib 파일에 있습니다). '상수'에 도달 할 수없는 경우 레이블을 선택하고 FrameRectangle View에서 x 좌표를 변경 한 다음 왼쪽에있는 구속 핀을 클릭합니다)여기에 이미지 설명 입력

참조 URL : https://stackoverflow.com/questions/26107188/how-do-i-adjust-the-left-margin-for-prototype-cells-in-a-uitableview

반응형