为什么更改UITextView的帧起源会完全破坏我的整个帧大小?

时间:2013-06-11 20:02:06

标签: ios uiscrollview resize uitextview frame

我有一个UITextview,上面有一个小的UIViewController,它的视图是UITextView(屏幕截图中的红色)。小红色textView是它下面较大textView的子视图。

看看它的样子。小textView是红色的,形状是小方块(让我们说50 x 50)。它是故意切割屏幕的边缘。这就是它的定位方式。

enter image description here

这是纵向的。当设备旋转到横向时,我希望小文本视图向左移动,使其不再位于较大的textView之上,但它仍然是子视图。因此,我创建了一个与小textView框架大小相同的新CGRect,然后更改原点的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;
    }
}

见下结果:

enter image description here

显然这是不正确的。我甚至没有触摸textView的帧大小,但这些属性已经改变了!更奇怪的是,如果我NSLog尺寸尺寸,它们与旋转前相同,为50 x 50。

一些观察结果:

  1. 仅当小红色textView是textView时才会发生这种情况。我可以使用UIImageView替换该视图,但不会发生此问题。
  2. 我相当肯定会发生这种情况,因为它是另一个UITextView的子视图。为什么?怎么样?不知道。
  3. 我开始认为问题在于大超级视图UITextView是如何旋转的,并且不知何故,子视图小红色textView正在以某种方式受到影响。即使"自动调整子视图"在接口生成器中未检查textViews。大型superview textView受约束限制在IB中的特定宽度和高度。所以尺寸并没有真正改变。
  4. 我真的很感激这方面的一些帮助。我已经看了几天而且无法查明原因或解决方案。

1 个答案:

答案 0 :(得分:0)

前一段时间解决了这个问题。分配textView的center属性而不是frame可以解决问题。

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

即便如此,即使在iOS 7中,为textView的frame分配不同的origin仍然会导致错误。但是分配中心的工作正常。