我有一个 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。
几点观察:
- 只有当红色的小 textView 是 textView 时才会发生这种情况。我可以用 UIImageView 替换该视图,并且不会发生此问题。
- 我相当肯定这正在发生,因为它是另一个 UITextView 的子视图。为什么?如何?没有线索。
- 我开始认为问题在于大超级视图 UITextView 是如何旋转的,并且不知何故子视图小红色 textView 正在以某种方式受到影响。即使没有检查界面构建器中的“Autoresize Subviews”是否为任何一个 textViews。大型超级视图 textView 被约束到 IB 中的特定宽度和高度,并带有约束。所以那里的大小并没有真正改变。
我真的很感激这方面的一些帮助。我已经看了几天了,只是无法确定原因或解决方案。