为啥更改 UITextView 的框架原点会完全破坏我的整个框架大小?
Posted
技术标签:
【中文标题】为啥更改 UITextView 的框架原点会完全破坏我的整个框架大小?【英文标题】:Why does changing a UITextView's frame origin completely disfigure my entire frame size?为什么更改 UITextView 的框架原点会完全破坏我的整个框架大小? 【发布时间】:2013-06-11 20:02:06 【问题描述】:我有一个 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 中的特定宽度和高度,并带有约束。所以那里的大小并没有真正改变。
非常感谢您对此的帮助。我已经研究了几天,但无法确定原因或解决方案。
【问题讨论】:
【参考方案1】:不久前解决了这个问题。分配 textView 的 center
属性而不是其 frame
可以解决问题。
CGPoint center = self.smallTextView.view.center;
center.x -=20.0;
self.smallTextView.center = center;
即便如此,将 textView 的 frame
分配给不同的 origin
仍然会导致错误,即使在 ios 7 中也是如此。但分配中心工作正常。
【讨论】:
以上是关于为啥更改 UITextView 的框架原点会完全破坏我的整个框架大小?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UITextView 在调整大小后会在坏帧中绘制文本?
更改 UIView 框架大小不会更改 UITableview 框架原点 y
在 UITextView 上调用 setAttributedText 会重置字体大小,我不知道为啥