programing

uilabel 너비를 동적으로 조정하는 자동 레이아웃

nasanasas 2020. 11. 24. 08:03
반응형

uilabel 너비를 동적으로 조정하는 자동 레이아웃


그래서 Storyboard에 두 개의 UILabels가 나란히 있습니다. 두 번째 레이블은 첫 번째 레이블의 오른쪽 가장자리에 맞아야합니다 (후행 제약 조건 1).하지만 최대 너비에 도달하지 않는 한 너비를 콘텐츠 크기와 동일하게 설정하려면 첫 번째 레이블 (왼쪽에있는 레이블)도 필요합니다. . 시각적으로 :


| 레이블 1 텍스트 | | 레이블 두 텍스트 |


그리고 다음과 같은 제약이 필요합니다.

1) 레이블 하나는 최대 크기에 도달하지 않는 한 너비를 조정해야합니다.

2) 레이블 2는 항상 레이블 1의 오른쪽 가장자리에 맞대어 야합니다.

Storyboard에서 어떻게 설정합니까?


  1. 레이블 사이에 1 포인트 수평 공간 만들기 : Control 키를 누른 상태에서에서 label2드래그하십시오 label1. 팝업에서 수평 간격을 선택하십시오. 제약 조건을 두 번 클릭합니다. 상수를 1로 변경합니다.
  2. label1최대 너비 제공 :을 선택 label1합니다. 상단 메뉴 표시 줄로 이동하여 편집기> 핀> 너비를 선택합니다. 제약 조건을 두 번 클릭합니다. 관계를 <=로 변경하고 상수를 최대 너비로 변경하십시오.
  3. 레이블을 수직으로 정렬 : 두 레이블을 모두 선택합니다. 상단 메뉴 표시 줄로 이동하여 Editor> Align> Vertical Centers를 선택합니다.
  4. 컨테이너보기에서 레이블이 배치되는 방식을 정의하는 제약 조건을 설정해야합니다. 나는 당신에게 맡깁니다. 나는 고정 된 label1루트 뷰의 왼쪽 가장자리에서 32 점과 최고의 레이아웃 가이드에서 34 점을.
  5. 위의 제약 조건을 반영하도록 레이블의 프레임을 업데이트합니다. 캔버스의 오른쪽 하단 모서리에있는 메뉴 모음으로 이동합니다. "자동 레이아웃 문제 해결"타이 파이터 버튼을 누릅니다. 팝업에서 "모든 프레임 업데이트…"를 선택합니다.

참고 : label1의 너비에 콘텐츠 크기를 반영 하도록 제약 조건을 만들 필요가 없었습니다 . 콘텐츠 크기 제한은 자동으로 생성됩니다.

여기에 이미지 설명 입력


UIlabel 및 UIButton 유연한 너비 설정에 대한 제약 조건은 아래를 참조하십시오.

xib 자동 레이아웃을 사용하여 텍스트에 따라 UIlabel 및 UIButton 유연한 너비 설정


먼저 아래 코드로 textSize를 얻으십시오.

    CGSize  textSize = { 230.0, 10000.0 };

    CGSize size = [[NSString stringWithFormat:@"%@", yourLabelText] 
                   sizeWithFont:[UIFont systemFontOfSize:10]
                   constrainedToSize:textSize
                   lineBreakMode:NSLineBreakByWordWrapping]; 

그런 다음 다음 내용 크기로 첫 번째 레이블 프레임을 설정하십시오.

   UILabel *lblFirst = [[UILabel alloc] initWithFrame:CGRectMake(X, Y, W, size.height)];
   lblFirst.lineBreakMode = YES;
   lblFirst.lineBreakMode = NSLineBreakByWordWrapping;
   lblFirst.numberOfLines =size.height;
   lblFirst.backgroundColor = [UIColor clearColor];
   [self.view addSubview:lblFirst];

두 번째 레이블 프레임은 다음과 같습니다.

 UILabel *lblFirst = [[UILabel alloc] 
 initWithFrame:CGRectMake(lblFollowerName.frame.size.width + lblFollowerName.frame.origin.x, Y, W, H)];

참고 URL : https://stackoverflow.com/questions/20798514/auto-layout-to-dynamically-size-uilabel-width

반응형