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

9 ответов

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

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];

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

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

    [_moreDetailsTextView sizeToFit];

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

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

https://github.com/MatejBalantic/MBAutoGrowingTextView

[UITextView sizeToFit];

Использование sizeToFit изменяет размер текстового представления, но вырезает некоторый текст снизу. Есть идеи, как решить эту проблему?

Решение:

Наконец метод, описанный в следующем потоке работал. /questions/32744131/uitableviewcell-s-vyisotoj-uitextview-v-ios-7/32744143#32744143

Недавно я обнаружил этот CSGrowingTextView, размеры которого при вводе текста могут быть полезны: https://github.com/cloverstudio/CSGrowingTextView

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

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

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

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

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

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. Найдите это здесь.

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

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

измените значение противопоказания так же, как вы меняете параметры view.frame

            _constraintHeaderTitle.constant = THE_NEW_VALUE;
Другие вопросы по тегам