#ios #iphone #objective-c #uitableview
#iOS #iPhone #objective-c #uitableview
Вопрос:
У меня есть UITableView
с двумя прототипами ячеек. Одну (первую на скриншоте выше) вы можете распознать как стандартную ячейку в стиле субтитров. Второй пользовательский, с дополнительным текстовым полем.
Когда я запускаю приложение, метки, использующие первый шаблон, увеличивают свою ширину в зависимости от размера текста в них, тогда как метки, использующие пользовательский шаблон, не масштабируются, эффективно обрезая текст после трех символов.
Есть ли способ настроить пользовательский шаблон в XCode Storyboard Designer для изменения размера метки, как это делает встроенный шаблон ячейки субтитров?
Комментарии:
1. Установка подходящих ограничений автоматической компоновки для ячейки, которую вы хотите настроить, заставит ее работать.
2. Как вы устанавливаете высоту каждой ячейки? Я имею в виду TableView:heightForRowAtIndexPath:
3. @Danyun почему это имеет значение? Я возвращаю 44 или 88 в зависимости от шаблона, который использует данная ячейка (первая или вторая соответственно)
4. Вы принимаете ширину или высоту? проблема может быть другой. Если width, вероятно, вы установили для метки «Title» фиксированную ширину в autolayout, поэтому она не может выразить свой внутренний размер содержимого.
5. ах, я вижу, где была путаница. Я говорил о ширине. Обновил вопрос, чтобы сделать его явным.
Ответ №1:
Установите ограничения, как показано на рисунке
Усеченная метка в изображении (T..) является текстовым полем.
Установите высоту строки на минимальный размер ячейки как 155.
Ответ №2:
Попробуйте это:
Вы можете изменить размер метки по отношению к тексту, введенному в текстовое поле
-(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
{
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = lineBreakMode;
NSDictionary * attributes = @{NSFontAttributeName:font,
NSParagraphStyleAttributeName:paragraphStyle
};
CGRect textRect = [text boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
return textRect.size;
}
Вызов метода:
CGSize size =[self frameForText:body sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:NSLineBreakByWordWrapping];
Спасибо
Комментарии:
1. Спасибо, я хочу избежать необходимости делать это в коде. Конечно, должно быть возможно добиться этого с помощью дизайнера раскадровки