AutoLayout中未更新视图框架

时间:2015-03-03 17:53:31

标签: ios objective-c xcode uiview autolayout

使用AutoLayouts获取更新的框架这是一个问题,我知道并通过它的解决方案。所有solutions效率都非常高,但我的问题很简单。

我做过的事情:

我有一个UIView,我需要根据需要更改它的大小,所以我提供了一个键setTranslatesAutoresizingMaskIntoConstraints作为YES。因为我已经为这个UIView创建了约束,并且约束不让我改变/反映框架。现在我成功地能够改变帧,但新问题是view没有给出渲染的坐标[origin(x,y)]。原始值未更新。

如果我删除setTranslatesAutoresizingMaskIntoConstraints,那么它可以正常工作。但我需要它。

我尝试了其他解决方案,例如使用 - [view setNeedsLayout] and [view layoutIfNeeded]在调用时更新UI,或者使用-(void)viewDidLayoutSubviews延迟对渲染帧的检索但是没有任何效果。

2 个答案:

答案 0 :(得分:0)

如果你有一些约束,不允许你更改坐标,那么你应该改变这个约束,但不是框架......只需为这个约束创建出口,改变constant属性并使用{{1方法

答案 1 :(得分:0)

首先,如果您使用自动布局,则需要设置translatesAutoresizingMaskIntoConstraints = NO

但回到你的问题。您可以做的一件事是使用KVO(键值观察器)在视图边界发生变化时通知您。例如:

[self.view addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionPrior context:nil];

然后,创建一个观察者方法,例如:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

  CGRect frame  = self.view.frame;

}

从框架中你应该能够获得宽度和高度。注意,这个方法可能被多次调用..