【问题标题】:Why is my UIView's frame changing unexpectedly after the embedded UITableView is interacted with?与嵌入式 UITableView 交互后,为什么我的 UIView 的框架会发生意外变化?
【发布时间】:2014-05-13 20:51:01
【问题描述】:

考虑以下UIView“MainView”:

该视图包含一个容器视图,该视图又包含一个UITableView 控制器。容器视图的 y 坐标从渐变条的下方开始。 UITableView 在最底部包含带有“STU”标签和“图表”按钮的节页脚。

UIView 加载时,以及直到与tableView 的任何交互,MainView's 维度是:

帧:0.000000x、0.000000y、568.000000w、268.000000h

我设置了一个委托协议,这样点击tableView 中的图表按钮将在MainView 中创建一个新视图,通过执行以下方法获得阴影效果:

CGRect newFrame = self.view.frame; // self = MainView
newFrame.size.width = 100;
newFrame.size.height = 50;
UIView *backgroundShadowView = [[UIView alloc] initWithFrame:newFrame];
backgroundShadowView.backgroundColor = [UIColor blackColor];
// Do Animation

上面的重要部分是'newFrame'CGRect。由于某种原因,在通过点击图表按钮与表格视图交互后,甚至滚动或点击一行后,self.view.frame 突然具有以下尺寸:

帧:0.000000x、52.000000y、568.000000w、268.000000h

因此阴影视图如下所示,y 原点比预期开始的位置要低得多,就在渐变条的上方。

我已经为这个问题调整了“shadowview”的宽度和高度;通常它是 568x268,但由于这个问题,屏幕底部会延伸 52 个单位。

52 个单位正好是状态栏 (20) + navigationbar_in_landscape (32) 的高度。

当然我可以手动调整框架尺寸,但我不想这样做。我想知道为什么视图的框架会发生意外变化。

对于我的一生,我无法弄清楚为什么视图会突然偏移。任何帮助表示赞赏!

【问题讨论】:

  • 可能与自动布局有关...

标签: ios objective-c uiview


【解决方案1】:

两个厘米。

(1)

这段代码可能总是错误的:

CGRect newFrame = self.view.frame; // self = MainView
newFrame.size.width = 100;
newFrame.size.height = 50;
UIView *backgroundShadowView = [[UIView alloc] initWithFrame:newFrame];

您肯定希望根据self.view边界定义backgroundShadowView 的框架,而不是像您在此处的第一行中所做的那样。

(2)

self.view.frame 的变化可能是虚幻的。您最初可能是在viewDidLoad 中检查的。但这为时过早;该视图尚未添加到界面中,因此尚未调整其大小以适应周围环境。

【讨论】:

  • 巧合的是,我刚刚发现这篇帖子stackoverflow.com/a/21793477/2418006 描述的内容大致相同。尽管如此,我还是不太明白 bounds 如何提供任何有用的信息 - bounds 的 x 和 y 原点不会总是为 0,因为它是一个相对于自身的坐标系?这种方法看起来几乎等同于手动将这些值设置为 0,但是使用边界“感觉更好”,因为它是父对象的属性:X
  • 好电话@你的第二条评论,现在看来很明显>。
  • @OneManBand 你没有显示足够的代码让我确定,这就是为什么我对冲我的答案 - 这取决于你用backgroundShadowView 在做什么。但是,如果您将其设为self.view 的子视图,那我是对的,因为backgroundShadowView.frameself.view.bounds 坐标系中。
  • 这是有道理的。谢谢,马特!
  • @OneManBand 换句话说,您必须永远根据父视图的 frame 设置子视图的框架;你必须总是根据它的superview的bounds来设置它。从这里开始查看我对框架和边界的讨论:apeth.com/iOSBook/ch14.html#_frame
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2017-08-22
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多