2013-07-18 3 views
3

현재 iOS 애플리케이션을 autolayout으로 이식하고 있으며 해결할 수없는 문제점을 발견했습니다. 문제는 UITableView입니다. Autolayout - 테이블 셀의 뷰 정렬

은 매우 간단하다 :

  1. 모든 셀 사이의 수평 간격으로 두 개의 레이블이 포함되어 있습니다.
  2. 나는 첫 번째 레이블이 자동으로 내가

포인트 1.과 2. 간단 같은 폭으로 모든 셀에 레이블을 원하는 내용

  • 에 따라 크기를 조정할 수 싶지만 난 몰라 다른 셀의 뷰가 동일한 크기를 갖도록 강제하는 제약 조건을 만드는 방법을 알고 있어야합니다.

    자동 레이아웃 솔루션이 있습니까? 아니면 수동으로 프레임을 설정해야합니까?

  • +0

    1과 3은 어떻게 호환됩니까? 모든 라벨을 모든 셀에서 가장 긴 텍스트의 너비로 사용 하시겠습니까? 왼쪽 및 오른쪽 레이블도 같은 크기를 원한다는 것을 의미합니까? – rdelmar

    +0

    @rdelmar 맞아. 모든 왼쪽 레이블에 가장 긴 텍스트의 너비가 있어야합니다. 내 유일한 생각은 테이블 외부에 숨겨진보기가 있고이보기의 너비 제약 조건 (코드)과 모든 셀의 왼쪽 레이블을 추가하는 것입니다. – Sulthan

    +0

    3을 원하십니까? 하나의 행에 액세서리보기 또는 삭제 버튼이 필요한 경우와 같이 가장자리 케이스를 고려 했습니까? – Maarten

    답변

    2

    두 개의 레이블이있는 사용자 정의 셀 클래스를 작성하면됩니다. 왼쪽 레이블에 너비 제약 조건 (셀의 왼쪽 가장자리와 중심 Y에 대한 제약 조건)을 지정하고 오른쪽 레이블에 왼쪽 레이블에 수평 간격 제한 조건을 지정합니다. IBOutlets를 두 개의 레이블로 만들고, 왼쪽 레이블의 너비 제약 조건에 하나도 지정합니다 (필자는 예제에서 widthCon이라고 부릅니다). 위 예제에서 두 레이블에 배경색을주었습니다. 그래서 너비를 볼 수있었습니다. viewDidLoad에서 가장 긴 문자열의 너비를 계산 한 다음 그 수를 사용하여 cellForRowAtIndexPath의 너비 제약 조건을 조정하십시오.

    @interface TableController() 
    @property (strong,nonatomic) NSArray *theData; 
    @property (nonatomic) CGFloat maxWidth; 
    @end 
    
    @implementation TableController 
    
    
    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        self.theData = @[@"One",@"Two",@"Three Hundred Forty",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine"]; 
        self.maxWidth = 0; 
        for (NSString *s in self.theData) { 
         CGSize stringSize = [s sizeWithFont:[UIFont systemFontOfSize:17]]; 
         if (stringSize.width > self.maxWidth) self.maxWidth = stringSize.width; 
        } 
        [self.tableView reloadData]; 
    } 
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        return self.theData.count; 
    } 
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    
        RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
        cell.widthCon.constant = self.maxWidth; 
        cell.leftLabel.text = self.theData[indexPath.row]; 
        return cell; 
    } 
    
    +0

    이것은 좋은 해결책입니다. 그래서 나는 여러분에게 포인트를 줄 것입니다. – Sulthan

    관련 문제