Ответ 1
Замечено в IOS7 sizeToFit тоже не работает - возможно, решение может вам помочь.
[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
Я использую этот код
CGRect frame = self.mytext.frame;
frame.size.height = self.mytext.contentSize.height;
self.mytext.frame = frame;
Но он не работает в iOS 7. Кто-нибудь знает, почему или имеет ту же проблему?
Редакция:
К сожалению. Я сделал UIView, UITextView и UIScrollView, поэтому я могу загрузить текст в моем расширении uitextview.
Я использовал этот код в viewDidLoad
CGRect frame = self.moreDetailsTextView.frame;
frame.size.height = self.moreDetailsTextView.contentSize.height;
self.moreDetailsTextView.frame = frame;
CGRect moreViewFrame = self.moreDetailsView.frame;
moreViewFrame.size.height = frame.size.height + 270;
self.moreDetailsView.frame = moreViewFrame;
int scrollViewHeight = moreViewFrame.size.height + 235;
self.scrollView.contentSize = CGSizeMake(320, scrollViewHeight);
Это отлично работает в ios6, но теперь с xcode5 и ios7 uitextview не расширяется, когда я тестирую приложение в симуляторе.
Замечено в IOS7 sizeToFit тоже не работает - возможно, решение может вам помочь.
[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
Наконец, я сделал это.
Если у кого-то такая же проблема, только этот код был до
[_moreDetailsTextView sizeToFit];
Чтобы решить эту проблему, я создал подклассу UITextView с легким весом с автоматической компоновкой, которая автоматически растет и сжимается в зависимости от размера пользовательского ввода и может быть ограничена максимальной и минимальной высотой - все без единой строки кода.
Сделано в первую очередь для использования в построителе интерфейса и работает только с Auto layout
[UITextView sizeToFit];
Использование sizeToFit изменяет размер текста, но сокращает текст снизу. Любая идея, как это решить?
Решение:
Наконец, обработан метод, описанный в следующем потоке. fooobar.com/questions/9702/...
Ни один из ответов не работал у меня. У меня есть редактируемый UITextView, который я хочу динамически расширять по высоте, поскольку текст растет в нескольких строках.
Он отлично работал для iOS6, но у меня были проблемы с iOS7, прокручивая текстовое представление, чтобы держать курсор видимым.
Решение для меня состояло в том, чтобы установить нижнюю вставку для текстового представления на iOS7. Вот так:
_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;
Удовлетворительные результаты. Удачи.
Недавно я нашел этот CSGrowingTextView, размер которого при вводе, возможно, может помочь: https://github.com/cloverstudio/CSGrowingTextView
Получить новый размер textView с помощью этого метода
CGSize sz = [_textView.text sizeWithFont:_textView.font]
если это не очень хорошо работает с высотой, получите ширину, которую вы только что получили от прелюбоподобного метода, и используйте следующий метод, чтобы получить нужную вам высоту.
- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
UITextView *textView = [[UITextView alloc] init];
[textView performSelectorOnMainThread:@selector(setAttributedText:)
withObject:text
waitUntilDone:YES];
CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
return size.height;
}
Примечание. Если в представлении была какая-либо анимация, все изменения, сделанные в view.frame, будут отброшены, так как представление снова будет перерисовано. Поэтому было бы лучше иметь дело с ограничениями, чем с самим фреймом, так как изменения, которые вы сделаете в ограничении, будут постоянными, даже если просмотр будет обновлен.
создать IBoutlet ограничения и связать его с вашим классом, подобным этому
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *your_constraint;
измените значение contraint так же, как и вы измените параметры view.frame, такие как
_constraintHeaderTitle.constant = THE_NEW_VALUE;
GrowingTextViewHandler - это подкласс NSObject, который изменяет размер текстового представления как текст пользовательских типов. Обработка изменения размера через подкласс NSObject более полезна, чем подклассификация UITextView, поскольку она будет работать для любого подкласса UITextView. Вот пример использования.
@interface ViewController ()<UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
@property (strong, nonatomic) GrowingTextViewHandler *handler;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.handler = [[GrowingTextViewHandler alloc]initWithTextView:self.textView withHeightConstraint:self.heightConstraint];
[self.handler updateMinimumNumberOfLines:3 andMaximumNumberOfLine:8];
}
- (void)textViewDidChange:(UITextView *)textView {
[self.handler resizeTextViewWithAnimation:YES];
}
@end
Я работал над полным решением для решения этой проблемы на iOS 9.3.1. Найдите здесь.