Mam problem z uzyskiwanie spójne wyniki z UITextViews w UITableViewCell przy użyciu NSAttributStrings.Jak konsekwentnie rysować NSAttributedString w UITextView w UITableViewCell
wewnątrz - (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 można zobacz, pierwsze dwa wydają się rysować tekst w sposób, jakiego oczekiwałbym/chciałbym. W dwóch ostatnich przypadkach metoda UITextView sizeThatFits zwraca znacznie większy rozmiar, a następnie jest wymagana do narysowania tekstu, a tekst zostaje wyśrodkowany w ramce, a następnie ciasno do górnej krawędzi ramki. Jest to problem, ponieważ chcę móc układać inne widoki na podstawie wysokości ramki uitextview.
po przewinięciu z ramą iz powrotem w:
Teraz robi się jeszcze dziwniej, gdy komórki są ponownie wykorzystywane, a przypisać ciąg jest ponownie ustawiony. uitextview rysuje tekst w niekonsekwentny sposób.
Nawet Ustawianie contentInsets do
headerText.contentInset = UIEdgeInsetsMake(-8, -8, -8, -8);
Nie dostarczenie jakichkolwiek spójnych wyników:
i po Przewijanie z zestawem contentinset:
istnieją inne atrybuty w UITextView, które pozwoliłyby mi uzyskać zachowanie th w razie potrzeby?
Używam UITextView, ponieważ implementuje on protokół UITextInput. Co pozwala mi tworzyć przyciski nad pewnymi podciągami tekstu. Przyznaję, że bezpośrednie rysowanie tekstu byłoby korzystne. Jakie biblioteki iOS powinienem zagłębić, aby to osiągnąć? Jeszcze raz dziękuję za odpowiedź na pytanie. –
Do rysowania tekstu nie są potrzebne "biblioteki". To część UIKit. – matt
Myślę, że być może będę musiał użyć CoreText, aby móc określić, czy dotknięcie dotarło nad linią lub tekstem. –