Динамическое расширение UITextView на ios 7

Я использую этот код

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 не расширяется, когда я тестирую приложение в симуляторе.

Ответ 1

Замечено в IOS7 sizeToFit тоже не работает - возможно, решение может вам помочь.

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];

Ответ 2

Наконец, я сделал это.

Если у кого-то такая же проблема, только этот код был до

    [_moreDetailsTextView sizeToFit];

Ответ 3

Чтобы решить эту проблему, я создал подклассу UITextView с легким весом с автоматической компоновкой, которая автоматически растет и сжимается в зависимости от размера пользовательского ввода и может быть ограничена максимальной и минимальной высотой - все без единой строки кода.

Сделано в первую очередь для использования в построителе интерфейса и работает только с Auto layout

https://github.com/MatejBalantic/MBAutoGrowingTextView

Ответ 4

[UITextView sizeToFit];

Использование sizeToFit изменяет размер текста, но сокращает текст снизу. Любая идея, как это решить?

Решение:

Наконец, обработан метод, описанный в следующем потоке. fooobar.com/questions/9702/...

Ответ 5

Ни один из ответов не работал у меня. У меня есть редактируемый UITextView, который я хочу динамически расширять по высоте, поскольку текст растет в нескольких строках.

Он отлично работал для iOS6, но у меня были проблемы с iOS7, прокручивая текстовое представление, чтобы держать курсор видимым.

Решение для меня состояло в том, чтобы установить нижнюю вставку для текстового представления на iOS7. Вот так:

_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;

Удовлетворительные результаты. Удачи.

Ответ 7

Получить новый размер 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;

Ответ 8

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

Ответ 9

Я работал над полным решением для решения этой проблемы на iOS 9.3.1. Найдите здесь.

введите описание изображения здесь