2013-10-27 3 views
1

HEJ Folks,MKMapView пользовательского callOutView с Автокомпоновка IOS 6 против iOS7

Моих приложений авария на MKMapView под прошивкой 6, если я использую Автокомпоновку для представления выноски. С iOS 7 это отлично работает.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 
CustomMapAnnotation *annotation = (CustomMapAnnotation *)view.annotation; 

if([annotation isKindOfClass:[CustomMapAnnotation class]]) { 
    CustomMapCalloutView *calloutView = [CustomMapCalloutView new]; 
    calloutView.translatesAutoresizingMaskIntoConstraints = NO; 

    calloutView.titleLabel.text = annotation.titleText; 
    calloutView.subTitleLabel.text = annotation.subTitleText; 
    calloutView.distanceTextLabel.text = annotation.distanceText; 

    [view addSubview:calloutView]; 

    NSDictionary *viewsDictionary = @{@"callOutView": calloutView}; 
    NSArray *hConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[callOutView(150)]" options:0 metrics:nil views:viewsDictionary]; 
    NSArray *vConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[callOutView(50)]" options:0 metrics:nil views:viewsDictionary]; 

    NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:calloutView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; 
    NSLayoutConstraint *yConstraint = [NSLayoutConstraint constraintWithItem:calloutView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]; 

    [view addConstraint:xConstraint]; 
    [view addConstraint:yConstraint]; 

    [view addConstraints:hConstraints]; 
    [view addConstraints:vConstraints]; 
}} 

Консоль показывает следующее сообщение об ошибке:

* Assertion failure in -[MKAnnotationView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m:5776 2013-10-27 13:39:18.519 PartySmarty[9825:907] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. MKAnnotationView's implementation of -layoutSubviews needs to call super.'

Может кто-нибудь дать мне подсказку, где проблема? CustomCalloutView работает также с автоматической компоновкой, и я не перезаписываю layoutSubviews внутри.

+0

http://stackoverflow.com/questions/14591366/subclassing-mkannotationview-with-use-of-auto-layout не помог мне, я не хочу вернуться к модели кадра :( – matzino

ответ

1

Этот SO Answer указывает на меня в правильном направлении. Я создаю категорию в MKAnnotationView, переопределяю метод layoutSubviews и вызываю метод super.

Это также работает на прошивке 7.

Смежные вопросы