У меня есть UITextView в представлении контента UITableViewCell и разрешает ячейке выполнять автоматическую сортировку, чтобы текст полностью отображался - то, что я пытаюсь выполнить, является ячейкой для автосохранения, например, с помощью приложения iOS4 Contacts имеет, когда вы вводите «заметки» для контакта, то есть когда изменяется contentSize textView - я вызываю reloadRowsAtIndexPaths, а в высоте делегатаForRowAtIndexPath я предоставляю новую высоту для строки - это делает работу, однако это не так приятно и плавно, как contact-app - я почти уверен, что Apple использует какой-то недокументированный трюк в этом приложении, чтобы содержимое контента ContentView расширялось гладко и анимировано без вызова reloadRowsAtIndexPaths. Мой вопрос: как вы предлагаете реализовать такую функциональность? Надеюсь, я не пропустил никаких подробностей в объяснении.UITextView в UITableViewCell плавное автоматическое изменение размера
ответ
Попробуйте этот код ниже, это поможет. Вам не нужно использовать какие-либо функции перезагрузки, такие как reloadRowsAtIndexPaths.
// TextView делегат
- (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 делегат
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height;
if (indexPath.row == 0)
height = kTitleRowHeight;
else
height = contentRowHeight;
return height;
}
Что такое contentView в этом коде? Я предполагаю, что это textView? – justadreamer
Это свойство UITableViewCell. В это свойство добавляется UITextView. [cell.contentView addSubview: textView]; –
Я использую это решение в своем приложении, и он работает на iPhone на 100%, но на iPad это не так: когда пользователь вводит более одной строки текста, 'UITableViewCell' становится выше, как предполагается , но 'UITextView' фактически перемещается * вверх *, так что первая строка текста находится над вершиной' UITableViewCell' - и скрыта. Любые идеи о том, как решить эту проблему на iPad? – Jason
Я нашел лучший способ решить эту проблему.
Во-первых, вы, конечно же, захотите создать свой UITextView и добавить его в контентную ячейку contentView. Я создал переменная экземпляра UITextView называется «cellTextView» Вот код, который я использовал:
- (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;
}
Затем создайте ИНТ переменную numberOfLines и установить переменную 1 в методе инициализации. После этого, в вашем методе textViewDelegate «s textViewDidChange, используйте этот код:
- (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];
}
Наконец, вставьте этот код в ваш метод heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
float height = 44.0;
if (cellTextView) {
height += (cellTextView.font.lineHeight * (numberOfLines - 1));
}
return height;
}
+1 Это хорошо работает. –
yep, это отлично работает +1. Кроме того, сохраняя numberOfLines в NSArray при индексе = indexPath.row с помощью textView.tag, установленного в indexPath.row, он делает несколько UITextview во многих ячейках меняющимися с размером текста в каждой ячейке. – Rambatino
Спасибо! И легким решением для этого было бы найти другой способ определения того, какой textView вы хотите изменить. Этот код был разработан для работы с одним текстовым элементом на ячейку. –
- 1. Изменение размера UITextView в UITableViewCell
- 2. Изменение размера UITextView и UITableViewCell
- 3. Автоматическое изменение размера пользовательского UITableViewCell
- 4. Изменение размера UITextView в пользовательских UITableViewCell
- 5. Автоматическое изменение размера UITextView в UIScrollView
- 6. UIPopOver, UITextView и автоматическое изменение размера
- 7. Плавное изменение размера MKCircle
- 8. Как поддерживать автоматическое изменение размера UITableViewCell с UILabel в нем
- 9. UITableViewCell Автоматическое изменение размера нескольких UILabels
- 10. Динамическое изменение размера UITextView
- 11. Автоматическое определение размера UITableViewCell
- 12. Изменение размера UITextView в пользовательском UITableViewCell в соответствии с contentSize
- 13. UITextView встроенный в UITableViewCell не изменение размера правильно
- 14. Изменение размера UITextView автоматически
- 15. Изменение размера проблемы UITextView
- 16. UITextView Изменение размера Динамически
- 17. Изменение размера текста в UITextView
- 18. Изменение размера UITableViewCell height
- 19. Динамическое изменение размера UITableViewCell
- 20. Автоматическое изменение размера div
- 21. Автоматическое изменение размера NSView
- 22. Автоматическое изменение размера узла
- 23. Android - автоматическое изменение размера
- 24. JQuery: плавное изменение размера при изменении html
- 25. osmdroid GoogleTilesOverlay плавное изменение размера zoom
- 26. Отключить автоматическое изменение размера UITableViewCell при изменении порядка
- 27. UITextView в UITableViewCell
- 28. Плавное изменение размера и угасание WP-приложения
- 29. Плавное изменение размера карты и карты
- 30. Изменение размера UIImageView в UITableViewCell
вы пробовали с помощью анимации UIView в? Я никогда не использовал их для этого, но это может сработать. – Jukurrpa
Да, я пробовал анимацию UIView для внутреннего содержимого, это немного сглаживает процесс, но мне интересно, есть ли способ не использовать reloadRowsAtIndexPaths, кажется, что для этого нет открытого метода. – justadreamer