Подтвердить что ты не робот

Применение преобразования к UITextView - предотвращение изменения содержимого

Когда я применяю преобразование вращения к UITextView, а затем щелкните внутри, чтобы начать редактирование, кажется, что размер контента автоматически расширяется. Новая ширина представления содержимого - это ширина ограничивающего окна с повернутым представлением. Например, с учетом текстового поля шириной 500 и высоты 400 и повернутого на 30 градусов, новая ширина содержимого будет:

(500 * cos(30)) + (400 * sin(30)) = 633

Или графически:

enter image description here

Интересно, что если вы уже редактируете текстовое представление, а THEN применяете это преобразование, то оказывается, что размер содержимого не изменяется. Таким образом, кажется, что когда-то вокруг начала редактирования текста текстовое представление просматривает его свойство frame и корректирует размер содержимого на основе ширины кадра. Я предполагаю, что решение этого заключается в том, чтобы сказать ему использовать свойство bounds, но я не знаю, где это сделать, поскольку я не уверен, где именно текстовое представление решает изменить размер содержимого.

У меня есть googled, но не могу найти ссылок на использование преобразованных UITextView. Есть ли у кого-нибудь идеи об этом?

EDIT (действие кнопки из тестового проекта):

- (IBAction)rotateButtonTapped:(id)sender {
    if (CGAffineTransformIsIdentity(self.textView.transform)) {
        self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0);
    }
    else {
        self.textView.transform = CGAffineTransformIdentity;
    }

    NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height);
}
4b9b3361

Ответ 1

Я тоже застрял в этой проблеме.

Единственное решение, которое я нашел, это создать экземпляр UIView и добавить UITextView в качестве подвью. Затем вы можете повернуть экземпляр UIView, и UITextView будет работать нормально.

UITextView *myTextView = [[UITextView alloc] init];
[myTextView setFrame:CGRectMake(0, 0, 100, 100)];

UIView *myRotateView = [[UIView alloc] init];
[myRotateView setFrame:CGRectMake(20, 20, 100, 100)];
[myRotateView setBackgroundColor:[UIColor clearColor]];
[myRotateView addSubview:myTextView];

myRotateView.transform = CGAffineTransformMakeRotation(0.8);
[[self view] addSubview:myRotateView];

Ответ 2

Вы пытались применить поворот, сделав преобразование слоя, а не преобразование в представлении?

#import <QuartzCore/QuartzCore.h>

mytextField.layer.transform = CATransform3DMakeRotation (angle, 0, 0, 1);

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