0

나는이 질문에 대한 많은 잠재적 대답을 이미 알고 있지만 지금까지는 사용하지 않은 sizeWithFont를 보았을 때까지 모든 대답의 99.995 %를 알고 있습니다.iOS - 동적으로 tableviewcell의 크기를 조절할 때의 문제

나는 여기서 다루고있는 tableviewcell 하나를 가지고 있지만 단순해야하지만 모든 것이 잘 풀리지 않습니다. 여기에 몇 가지 답변을 온라인으로 읽음으로써 작성된 코드가 있습니다. 이것은 셀 레이블입니다. 스토리 보드에 정의

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *myString = [self.locations[indexPath.row] locationDescription]; 
    return [self heightForText:myString] + 44.0; 
} 

-(CGFloat)heightForText:(NSString *)text{ 

    NSInteger MAX_HEIGHT = 10000; 
    UILabel *cellLabelView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, MAX_HEIGHT)]; 
    cellLabelView.text = text; 
    cellLabelView.font = [UIFont fontWithName:@"Helvetica Neue Light" size:18]; 
    [cellLabelView sizeToFit]; 
    return cellLabelView.frame.size.height; 
} 

높이가 44로 설정되어 있고 선은 라벨 자체 라벨이 그것을 할 필요가 얼마나 큰 결정할 수 있도록 0으로 설정됩니다.

문제 # 1 : 레이블에 설정된 텍스트가 단어 줄 바꿈이 아니더라도 (분명히) 나는 원하는 것이 아닌 여분의 패딩을 얻습니다. 실제로 단어 줄 바꿈이 있는지 여부를 계산하는 방법을 모르겠습니다. 단어 줄 바꿈이 없으면 (예 : 텍스트가 레이블보다 길면 44를 반환하고 싶습니다).

문제가 # 2 : 내 텍스트가 예를 들어 5 줄 상당의 텍스트가 너무 길면 MAXHEIGHT가 10,000 임에도 불구하고 문자열 끝 부분의 텍스트 일부가 잘릴 수 있습니다. 마치 단어 줄 바꿈을 멈추기로 결정한 것처럼. 이 시점에서 패딩을 늘리면 88이라고 말하면 모든 것을 볼 수 있습니다. (기묘한).

몇 가지 우아한 솔루션, 피드백, 도움을 찾으십시오. 감사!

답변

2

NSStringsizeWithFont:은 실제로 iOS 7에서는 사용되지 않지만 sizeWithAttributes:으로 대체되었습니다. 여러 줄짜리 텍스트의 경우 boundingRectWithSize:options:attributes:context:이 유용합니다. 당신의 UILabel 방법에 대한 관련 대안을

iOS 7 sizeWithAttributes: replacement for sizeWithFont:constrainedToSize

를 참조하십시오.

문제 # 1 : 원하는 효과가 무엇인지 정확히 모르겠습니다. 당신이 기초를하려는 경우, 그러나

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *myString = [self.locations[indexPath.row] locationDescription]; 
    CGFloat myPadding = 20.0; // for example 
    return MAX([self heightForText:myString] + myPadding, 44.0); 
} 

: 당신이 있지만 44 점의 최소 셀 높이와 위하고 UILabel 아래 일정한 패딩을 찾고 있다면, 당신은 같은 작업을 수행 할 수 있습니다 다음 UIFontlineHeight 재산과 반올림하여 계산 된 높이를 나눈 어떻게 든 텍스트 줄 수에 휴대 높이가 작동합니다

NSUInteger numberOfLines = roundf(calculatedTextHeight/font.lineHeight); 

문제 # 2 : 높이를 계산하기 위해 만드는 레이블 numberOfLines이 0으로 설정되지 않았으므로 여러 줄로 자체 크기를 조정하지 않습니다. 레이블.

은 내가 NSString 방법은 아래로가는 최적의 경로라고 생각하지만, 당신이 UILabel 방법을 사용하려는 경우 여담으로, 나는 UITableView 스크롤 성능을 예를 들어, 도움 한 번만 라벨을 만들 것을 권 해드립니다

-(CGFloat)heightForText:(NSString *)text{ 
    NSInteger MAX_HEIGHT = 10000; 
    static UILabel *cellLabelView = nil; 
    if (!cellLabelView) 
    { 
    cellLabelView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, MAX_HEIGHT)]; 
    cellLabelView.text = text; 
    cellLabelView.font = [UIFont fontWithName:@"Helvetica Neue Light" size:18]; 
    cellLabelView.numberOfLines = 0;  
    } 
    return [cellLabelView sizeThatFits:CGSizeMake(320, MAX_HEIGHT)].height; 
}