我喜欢iOS 6中新的自动布局功能,但在与MKAnnotationView子类结合使用时遇到了一些麻烦。
我在初始化方法中禁用了自动调整掩码转换。
self.translatesAutoresizingMaskIntoConstraints = NO;
但是当我加载使用我的子类注释的MKMapView时,应用程序抛出一个NSInternalInconsistencyException。
*** Assertion failure in -[ENMapAnnotationView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. ENMapAnnotationView's implementation of -layoutSubviews needs to call super.'
我没有覆盖-layoutSubviews,所以对我来说,看起来Apple的MKAnnotationView实现还没有为自动布局做好准备。 有没有一些聪明的方法来解决MKAnnotationView中缺少自动布局支持的问题,所以我可以在我的子类中使用自动布局?
答案 0 :(得分:6)
注释视图的AutoLayout工作正常,直到iOS SDK 8.使用iOS SDK 8,我看到了具有动态约束的视图的奇怪行为,它们在整个地图上移动,有时甚至在左上角对齐。
解决方案是setTranslatesAutoresizingMaskIntoConstraints:YES
和
[annotationView setBounds:CGRectMake(0, 0, width, height)];
并使用从子视图计算的宽度和高度。那么至少你可以使用子视图的约束。
答案 1 :(得分:4)
请勿禁用ENMapAnnotationView的translatesAutoresizingMaskIntoConstraints(否则您将错过Pin)。 并确保启用要添加到ENMapAnnotationView的视图的translatesAutoresizingMaskIntoConstraints !!!
photoViewAddToAnnotationView.translatesAutoresizingMaskIntoConstraints = YES;
就是这样!我们不需要关闭自动布局(关闭自动布局也可以解决问题'
答案 2 :(得分:-1)
可能你必须在ENMapAnnotaitonView类中实现 - (void)layoutSubviews方法。