【发布时间】:2013-12-13 05:37:03
【问题描述】:
我需要根据可用的磁盘空间来更改子视图的宽度。所以我有一个在视图控制器的 viewWillLayoutSubviews 上调用的选择器:
CGRect rect = self.usageView.bounds;
rect.size.width = self.someCalculatedwidth;
[self.usageView setFrame:rect];
[self.usageView setNeedsDisplay];
真的,我只是想改变子视图的宽度。如果视图控制器是初始控制器,它就可以工作;但是,如果它是从一个 Push Segue 转换过来的,它就会停止工作。发生的情况是我会暂时看到我想要的宽度,但随后它会根据情节提要上的蓝图更改为原始宽度。
这种行为感觉就像iOS在推送segue动画期间将原始(故事板)视图缓存在一个块中,并在完成后执行上面没有我计算的块;从而覆盖所需的视图。有什么想法吗?
【问题讨论】:
-
你在使用自动布局吗?
-
@user1459524 是的,我是。目前对这个特定的子视图没有任何限制。我做了实验并“添加了缺失的约束”,但这没有任何区别。我还在 viewDidAppear 中调用了我的“调整大小”选择器,但即使是这种尝试也会被撤销。调整大小选择器的任何后续调用(例如,由于方向更改、点击按钮等);只有在 push segue 之后的第一个有问题。
-
如果您在上面粘贴的代码中省略了对 setNeedsDisplay 的调用,会发生什么?
-
@user1459524 省略 setNeedsDisplay 没有任何区别,我确实需要它来进行后续调用以刷新视图。