Jak konsekwentnie rysować NSAttributedString w UITextView w UITableViewCell
Mam problemy z uzyskaniem spójnych wyników z UITextViews w UITableViewCell przy użyciu NSAttributedStrings.
Inside - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
headerText = [[UITextView alloc]initWithFrame:CGRectZero];
[headerText setUserInteractionEnabled:NO];
headerText.tag = HEADER_TEXT;
[cell.contentView addSubview:headerText];
} else {
headerText = (UITextView*)[cell.contentView viewWithTag:HEADER_TEXT];
}
//...setting up attributed strings
[headerText setAttributedText:headerString];
CGSize headerSize = [headerText sizeThatFits:CGSizeMake(246, CGFLOAT_MAX)];
headerText.frame = CGRectMake(45, 8, headerSize.width, headerSize.height);
Wyniki:
Jak widać, pierwsze dwa wydają się rysować tekst w sposób, którego oczekiwałem / chciałbym. W dwóch ostatnich metodach UITextView sizeThatFits zwraca znacznie większy rozmiar, niż wymagany jest do narysowania tekstu, a tekst staje się wycentrowany w ramce, a nie napięty do górnej części ramki. Jest to problem, ponieważ chcę mieć możliwość rozmieszczenia innych widoków na podstawie wysokości ramki uitextview.
Po przewinięciu poza ramkę iz powrotem do:
Teraz staje się jeszcze dziwniejszy, gdy komórki są ponownie używane, a przypisany ciąg jest ustawiany ponownie. uitextview rysuje tekst w niespójny sposób.
Parzyste Ustawianie zawartościInsets na
headerText.contentInset = UIEdgeInsetsMake(-8, -8, -8, -8);
Nie zapewnia żadnych spójnych wyników:
A po przewijaniu za pomocą zestawu contentinset:
Czy są inne atrybuty na UITextView, które pozwolą mi uzyskać zachowanie, którego potrzebuję?