0

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

这是它的样子。小 textView 是红色的,形状是小正方形(比如说 50 x 50)。它是故意切割屏幕边缘的。就是这样定位的。

在此处输入图像描述

这是纵向的。当设备旋转到横向时,我希望小 textView 向左移动,这样它就不再位于较大的 textView 之上,但它仍然是一个子视图。所以我新建了一个和小textView的frame一样大小的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;
    }
}

结果如下:

在此处输入图像描述

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

几点观察:

  1. 只有当红色的小 textView 是 textView 时才会发生这种情况。我可以用 UIImageView 替换该视图,并且不会发生此问题。
  2. 我相当肯定这正在发生,因为它是另一个 UITextView 的子视图。为什么?如何?没有线索。
  3. 我开始认为问题在于大超级视图 UITextView 是如何旋转的,并且不知何故子视图小红色 textView 正在以某种方式受到影响。即使没有检查界面构建器中的“Autoresize Subviews”是否为任何一个 textViews。大型超级视图 textView 被约束到 IB 中的特定宽度和高度,并带有约束。所以那里的大小并没有真正改变。

我真的很感激这方面的一些帮助。我已经看了几天了,只是无法确定原因或解决方案。

4

1 回答 1

0

不久前解决了这个问题。分配 textView 的center属性而不是它的属性frame可以解决问题。

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

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

于 2013-10-22T22:21:59.293 回答