Ich habe eine UITextView in einer UITableViewCell contentview und erlauben der Zelle Autoresize, so dass der eingegebene Text vollständig angezeigt wird - was ich versuche zu erreichen ist eine Autoresizing Zelle wie die native iOS4 Kontakte App hat, wenn Sie "Notizen" für den Kontakt eingeben - dh wenn sich die contentSize des textView ändert - rufe ich reloadRowsAtIndexPaths auf und im delegate heightForRowAtIndexPath lege ich die neue Höhe für row an - das macht den Job, aber es ist nicht schön und glatt wie der Kontakt-App - Ich bin mir fast sicher, dass Apple einen nicht dokumentierten Trick in dieser App verwendet, um die contentView der Zelle glatt und animiert zu erweitern, ohne reloadRowsAtIndexPaths aufzurufen. Meine Frage ist, wie würden Sie vorschlagen, solche Funktionalität zu implementieren? Ich hoffe, ich habe keine Details in der Erklärung vermisst.UITextView in einer UITableViewCell glatte automatische Größenanpassung
Antwort
Versuchen Sie diesen Code unten, es wird Ihnen helfen. Sie müssen keine Reload-Funktionen wie reloadRowsAtIndexPaths verwenden.
// Textview Delegat
- (void)textViewDidChange:(UITextView *)textView {
if (contentView.contentSize.height > contentRowHeight) {
contentRowHeight = contentView.contentSize.height;
[theTableView beginUpdates];
[theTableView endUpdates];
[contentView setFrame:CGRectMake(0, 0, 300.0, contentView.contentSize.height)];
}
}
// Tableview Delegat
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height;
if (indexPath.row == 0)
height = kTitleRowHeight;
else
height = contentRowHeight;
return height;
}
Was ist ContentView in diesem Code? Ich nehme an, es ist TextView? – justadreamer
Das ist die Eigenschaft von UITableViewCell. UITextView wird in dieser Eigenschaft hinzugefügt. [cell.contentView addSubview: textView]; –
Ich verwende diese Lösung in meiner App und es funktioniert 100% auf dem iPhone, aber auf dem iPad ist es nicht: wenn der Benutzer mehr als eine Textzeile eingibt, wird die 'UITableViewCell' größer, wie es soll , aber das 'UITextView' bewegt sich tatsächlich * nach oben *, so dass die erste Textzeile über dem oberen Rand von 'UITableViewCell' liegt - und versteckt. Irgendwelche Ideen, wie man das auf dem iPad löst? – Jason
fand ich den besten Weg, dies zu lösen.
Zunächst einmal, natürlich werden Sie Ihre UITextView erstellen und fügen Sie es in Ihre Zelle contentView. Ich habe eine Instanzvariable von UITextView "cellTextView" genannt Hier ist der Code, den ich verwenden:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
if (!cellTextView) {
cellTextView = [[UITextView alloc] initWithFrame:CGRectMake(5.0, 5.0, cell.bounds.size.width - 30.0, cell.bounds.size.height - 10.0)]; // I use these x and y values plus the height value for padding purposes.
}
[cellTextView setBackgroundColor:[UIColor clearColor]];
[cellTextView setScrollEnabled:FALSE];
[cellTextView setFont:[UIFont boldSystemFontOfSize:13.0]];
[cellTextView setDelegate:self];
[cellTextView setTextColor:[UIColor blackColor]];
[cellTextView setContentInset:UIEdgeInsetsZero];
[cell.contentView addSubview:cellTextView];
return cell;
}
Dann eine int Variable erstellen NumberOfLines genannt und die Variable auf 1 in der init-Methode. Danach in Ihrem textViewDelegate ‚s textViewDidChange Methode, diesen Code verwenden:
- (void)textViewDidChange:(UITextView *)textView
{
numberOfLines = (textView.contentSize.height/textView.font.lineHeight) - 1;
float height = 44.0;
height += (textView.font.lineHeight * (numberOfLines - 1));
CGRect textViewFrame = [textView frame];
textViewFrame.size.height = height - 10.0; //The 10 value is to retrieve the same height padding I inputed earlier when I initialized the UITextView
[textView setFrame:textViewFrame];
[self.tableView beginUpdates];
[self.tableView endUpdates];
[cellTextView setContentInset:UIEdgeInsetsZero];
}
Schließlich fügen Sie diesen Code in Ihre heightForRowAtIndexPath Methode:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
float height = 44.0;
if (cellTextView) {
height += (cellTextView.font.lineHeight * (numberOfLines - 1));
}
return height;
}
+1 Das funktioniert gut. –
yep, das funktioniert super +1. Durch Speichern der numberOfLines in einem NSArray bei index = indexPath.row mit dem textView.tag, der auf indexPath.row festgelegt ist, werden außerdem mehrere UITextviews in vielen Zellen mit der Textgröße in jeder Zelle geändert. – Rambatino
Danke! Und eine einfache Lösung wäre es, eine andere Möglichkeit zu finden, um festzustellen, welche textView-Datei die Größe ändern soll. Dieser Code wurde für die Arbeit mit einem TextView pro Zelle angepasst. –
- 1. iOS 8 automatische Größenanpassung von UITableViewCell mit UITextView
- 2. Glatte Größenanpassung von MKCircle
- 3. Automatische Größenanpassung in TVirtualStringTree
- 4. CSS, automatische Größenanpassung div?
- 5. UITextView in UITableViewCell verhindert segue
- 6. Automatische Größenanpassung einer Komponente innerhalb eines GridBagLayout
- 7. UITextView - addSubview - Automatische Anordnung
- 8. Automatische Größenanpassung der JTable-Spaltenbreiten
- 9. Gridpanel automatische Größenanpassung bei Fenstervergrößerung
- 10. Scrollbare Composite - automatische Größenanpassung - swt
- 11. Automatische Größenanpassung der Spaltenbreite Datentabelle
- 12. Angular nvd3 Liniendiagramm automatische Größenanpassung
- 13. Wie UITableViewCell Höhe wegen Text in UITextView
- 14. Div nicht automatische Größenanpassung in Firefox
- 15. UITextView automatische Scroll nach unten
- 16. Automatische Größenanpassung von Spalten basierend auf Zeichenanzahl
- 17. Hide UITableviewcell, die UITextview (Autolayout) enthält
- 18. Android: automatische Größenanpassung für jedes Gerät
- 19. Runde Ecken für die automatische Größenanpassung UIView
- 20. Automatische Größenanpassung der Windows Forms-Steuerelemente
- 21. Glatte UITextView automatisch scrollen bis zum Ende des Rahmens
- 22. Automatische Größenanpassung von Bildern in HTML5 CSS3 für iPad
- 23. Automatische Größenanpassung funktioniert nicht im Eingabetextbereich in Oberflächen 5.3.6
- 24. jQuery UI inline Datepicker automatische Größenanpassung an übergeordnete Container
- 25. UITextViewDelegate-Methoden werden nicht aufgerufen (UITextView innerhalb von UITableViewCell)
- 26. Proportionale Größenanpassung einer Bitmap
- 27. So deaktivieren Sie die automatische Vervollständigung in UITextView iPhone-Tastatur
- 28. Bootstrap Spaltenbreite - automatische Größenanpassung, wenn andere Container entfernt werden
- 29. erhöhen Sie uitableviewcell Höhe gleichzeitig erhöhen die innere UITextView
- 30. UITextview Höhe in UITableview Swift
Haben Sie versucht UIView Animationen mit? Ich habe sie nie dafür benutzt, aber das könnte funktionieren. – Jukurrpa
Ja, ich habe einige UIView-Animationen für den inneren Inhalt ausprobiert, es glättet den Prozess etwas, aber ich frage mich, ob es eine Möglichkeit gibt, reloadRowsAtIndexPaths nicht zu verwenden, anscheinend gibt es keine offengelegte Methode dafür. – justadreamer