Я пытаюсь отобразить сообщение с динамической высотой, используя UITextView, но когда сообщение достаточно длинное, чтобы покрыть экран, я не получаю функцию прокрутки. Я перепробовал много онлайн-решений, но все не удалось. Я использую NSMutableAttributedString
для форматирования моего текста.
Вот моя последняя попытка:
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[self.descString dataUsingEncoding:NSUTF8StringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
__block BOOL found = NO;
[attrStr beginEditing];
[attrStr enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrStr.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
UIFont *oldFont = (UIFont *)value;
UIFont *newFont = [oldFont fontWithSize:16];
[attrStr addAttribute:NSFontAttributeName value:newFont range:range];
[attrStr addAttribute:NSForegroundColorAttributeName
value:[UIColor darkGrayColor]
range:range];
found = YES;
}
}];
if (!found) {
// No font was found - do something else?
}
[attrStr endEditing];
CGRect labelSize = [attrStr boundingRectWithSize:CGSizeMake(self.view.frame.size.width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
self.textviewHeight.constant = labelSize.size.height;
В Интерфейсном Разработчике я использовал UIScrollView, внутри него я поместил UIView, а внутри UIView я добавил UITextView. textviewHeight
- ограничение высоты UITextView. Я не могу поверить, что такая простая вещь заняла у меня так много часов, и у меня до сих пор нет решения. Пожалуйста, помогите!
Другие решения, которые я попробовал и потерпели неудачу:
1
CGRect labelSize = [self.descString boundingRectWithSize:CGSizeMake(self.view.frame.size.width * 0.97, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]} context:nil];
self.descView.frame = CGRectMake(labelSize.origin.x,
labelSize.origin.y,
ceil(labelSize.size.width),
ceil(labelSize.size.height));
[self.descView sizeToFit];
2
CGRect labelSize = [attrStr boundingRectWithSize:CGSizeMake(self.view.frame.size.width * 0.97, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
CGRect frame = self.descView.frame;
frame.size.height = labelSize.size.height;
self.descView.frame = frame;
Я не против использования UILabel, если его проще реализовать.