使用AutoLayouts获取更新的框架这是一个问题,我知道并通过它的解决方案。所有solutions效率都非常高,但我的问题很简单。
我做过的事情:
我有一个UIView,我需要根据需要更改它的大小,所以我提供了一个键setTranslatesAutoresizingMaskIntoConstraints
作为YES
。因为我已经为这个UIView创建了约束,并且约束不让我改变/反映框架。现在我成功地能够改变帧,但新问题是view
没有给出渲染的坐标[origin(x,y)]。原始值未更新。
如果我删除setTranslatesAutoresizingMaskIntoConstraints
,那么它可以正常工作。但我需要它。
我尝试了其他解决方案,例如使用 - [view setNeedsLayout] and [view layoutIfNeeded]
在调用时更新UI,或者使用-(void)viewDidLayoutSubviews
延迟对渲染帧的检索但是没有任何效果。
答案 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;
}
从框架中你应该能够获得宽度和高度。注意,这个方法可能被多次调用..