2013-06-11 2 views
0

У меня есть UITextview с небольшим UIViewController поверх него, представление которого UITextView (оно красное на снимках экрана). Небольшой красный textView - это подвид большего текстового элемента под ним.Почему изменение источника кадра UITextView полностью искажает весь размер вашего кадра?

Heres, как выглядит. Маленький textView красный и имеет форму маленького квадрата (скажем, 50 х 50). Он намеренно срезается с краем экрана. Вот как он позиционируется.

enter image description here

Это в портрете. Когда устройство повернуто к пейзажу, я хотел бы, чтобы маленький текстовый движок перемещался влево, поэтому он больше не находится поверх большого текстового изображения, но он все еще является подвью. Поэтому я создаю новый CGRect, который имеет тот же размер, что и малый блок textView, а затем меняет координату x начала координат. Затем переназначьте малый блок textViews на измененный. Вот как:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation ==UIInterfaceOrientationLandscapeRight) { 
     CGRect smallFrame = self.smallTextView.view.frame; 
     smallFrame.origin.x -=20.0; 
     self.smallTextView.view.frame = smallFrame; 
    } 
} 

Heres результат:

enter image description here

Очевидно, что это неправильно. Я даже не касаюсь размера фрейма textView, но эти атрибуты изменены! Что незнакомец, что если я NSLog размеров размера, они такие же, как они были до поворота, 50 х 50.

Несколько наблюдений:

  1. Это происходит только тогда, когда маленький красный TextView является TextView. Я мог бы заменить это представление на UIImageView, и эта проблема не возникает.
  2. Я уверен, что это происходит, потому что это подзаголовок другого UITextView. Зачем? Как? Нет подсказки.
  3. Я начинаю думать, что проблема заключается в том, как работает большой супервизор UITextView, и каким-то образом какой-то путь осуществляется с небольшим красным текстовым элементом subview. Несмотря на то, что «Autoresize Subviews» в построителе интерфейса не проверяется ни для textViews. Большой супервизор textView ограничен определенной шириной и высотой в IB с ограничениями. Таким образом, размер на самом деле не меняется.

Я бы очень признателен за помощь в этом. Я смотрел на него несколько дней и просто не могу определить причину или решение.

ответ

0

Решено это некоторое время назад. Проблема заключается в назначении свойства textView center вместо frame.

CGPoint center = self.smallTextView.view.center; 
center.x -=20.0; 
self.smallTextView.center = center; 

Даже до сих пор, присваивающая TextView-х frame с другой origin до сих пор вызывает ошибку, даже в прошивке 7. Но назначая центр работает просто отлично.

Смежные вопросы