2015-01-20 3 views
2

기본적으로 자동보기 사용자 정의 테이블보기 셀을 사용하여 테이블보기에 데이터를 표시하고 크기를 완벽하게 조정합니다. 셀에 데이터를 표시하려면 UILabel이 있고 장치 텍스트 크기가 변경되면 셀에 자동 크기가 지정됩니다. 나는 때때로 UILabel의 모든 텍스트를 보여주기 위해 셀 자동 크기 지정에 문제가 있습니다. 예를 들어 텍스트 크기가 중간 크기 인 경우 긴 레이블의 모든 텍스트를 완전히 표시하지 않는 경우가 대부분이며 "..."표시가되지만 텍스트 크기를 늘리거나 줄이면 그것은 모든 것이지만 다른 세포에 대해서도 똑같은 일을 할 수 있습니다.iOS 8 - 자동 크기 조절 셀이 항상 모든 라벨 텍스트를 표시하지는 않습니다.

제안 사항?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"CellIdentifier"; 

    _cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (_cell == nil) 
    { 
     _cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    PFObject *object = [_postsArray objectAtIndex:indexPath.row]; 

    NSString *nameString = [object objectForKey:@"Name"]; 

    _cell.cellLabel.text = [NSString stringWithFormat:@"Posted by %@", nameString]; 
    _cell.cellPostLabel.text = [NSString stringWithFormat:@" %@", [object objectForKey:@"Post"]]; 

    //The following lines are to auto resize when the text size is changed 

    _cell.cellLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote]; 
    _cell.cellPostLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; 

    return _cell; 

} 
+0

레이블이 멀티 라인 있습니까? – jszumski

+0

그들은 있습니다. 셀 높이는'_cell.cellPostLabel'의 높이 (선의 양)에 따라 자동으로 결정됩니다. 라벨은 다른보기 컨트롤러에서 작성되었으며 최대 문자 크기가 199이므로 지나치게 길지 않은 게시물을 표시합니다. – kyle

+0

수정 : 여러 줄로 표시 할 수 있으며 텍스트의 양에 따라 다릅니다. 일부는 그렇지 않을 수도 있습니다. – kyle

답변

0

_cell.cellLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 
+0

제안에 감사하지만 주사위를주지 마십시오. 나는 심지어 _cell.cellPostLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;와 _cell.cellPostLabel을 시도했다.자동 크기 조정 마스크 = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin' 저는 셀 높이가'_cellPostLabel' 높이에 따라 자동 크기 조정되기 때문에 효과가있을 것이라고 생각했지만 아직 아무것도 아닙니다. 어쩌면'preferredFontForTextStyle :'메소드가 그것을 반대하는 것일까? – kyle

0

자동 레이아웃 문제 파악을 가지고 도움이된다면 autoresizingMask를 사용해보십시오 :

- (void)viewDidAppear:(BOOL)animated 
{ 

    [self.tableView reloadData]; 

    [self retrieveFromParse]; 

    self.tableView.estimatedRowHeight = 100; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 

} 

및 텍스트 크기에 따라 자동 크기하기 : 여기에 자동 크기를 호출 내 코드는 각 줄에 preferredMaxLayoutWidth을 설정하지 않으면 여러 줄 레이블을 그릴 수 있습니다. 문제는 테이블이이 문제를 해결하려면 등 다양한 아이폰 & 아이 패드 장치, 방향, 가로 질러 폭을 변경할 수 있기 때문에 사용 할 값을 알아내는되고, 나는 보통 layoutSubviews을 무시 UILabel를 서브 클래스 :

- (void)layoutSubviews { 
    [super layoutSubviews]; // 1 

    self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds); // 2 

    [super layoutSubviews]; // 3 
} 
  1. 첫 번째 통화를 super으로 설정하면 레이블의 넓이가 올바르게 결정됩니다.
  2. 올바른 너비를 사용하여 preferredMaxLayoutWidth을 올바른 값으로 설정하십시오.
  3. 레이블을 최종 및 올바른 속성으로 렌더링하려면 다른 레이아웃 단계를 수행하십시오.
+0

보기가 나타나면 즉시 작동하지 않지만 아래로 스크롤하여 레이블이 화면에서 벗어나 다시 위로 스크롤하면 고정되어 전체 레이블 내용이 표시됩니다. – kyle

0

autolayout을 사용하는 경우 해결책이 있습니다. 나는 이것이 완벽한 것임을 확신하지 못한다. 그러나 여기 (Swift)이다 :

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    // configure your cell 
    cell.layoutIfNeeded()  
} 

P. layoutIfNeeded를 사용하지 않고 내 장치를 회전하여 다시 세로, 라벨 레이아웃으로 되돌리려면 다음과 같이해야합니다. 하나의 셀에 2 개 이상의 문자열.

(프로젝트에서 하나 이상의 프로토 타입 셀을 사용함) 다른 유형의 셀은 괜찮지 만 그 레이블에는 정확한 제약 조건 및 설정이 있기 때문에 이러한 이유가 발견되지 않았습니다.

-1
override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 66 
} 
UITableViewCellStyle.Default 세포에 잘 8.4.1에

작품