2014-09-21 6 views
7

Es funktioniert gut auf iOS 7, aber UIImageViews Position verschiebt sich auf iO8 wie Bilder unten. Auch die rightCalloutAccessoryView-Position verschiebt die obere rechte Ecke.UIImageView als Callouts linksCalloutAccessoryView verschiebt automatisch die obere linke Ecke

Kann jemand helfen?

Prost.

Ios 7

iOS 7

Ios 8

iOS8

- (void) mapView: (MKMapView *) mapView didSelectAnnotationView: (MKAnnotationView *) Ansicht {

if(![view.annotation isKindOfClass:[MKUserLocation class]]) { 

    UBAnnotation *selectedAnnotation = view.annotation; 

    NSURL * imageUrlAtIndex = [NSURL URLWithString:[[self.objects objectAtIndex:selectedAnnotation.idx] ad_thumbImageUrl]]; 


    UIImageView * leftCalloutView = [[UIImageView alloc] initWithFrame:CGRectMake(2, 2, 40, 40)]; 
    [leftCalloutView setImageWithURL:imageUrlAtIndex]; 
    leftCalloutView.layer.masksToBounds = YES; 
    leftCalloutView.layer.cornerRadius = 6; 

    view.leftCalloutAccessoryView = leftCalloutView; 

} 

}

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id) Anmerkung {

MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; 

if ([annotation isKindOfClass:[MKUserLocation class]]) { 
    return nil; 
} else { 
    annView.image = [UIImage imageNamed:@"pin"]; 

    annView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    annView.rightCalloutAccessoryView.tintColor = [UBColor ubGreenColor]; 
    annView.animatesDrop= NO; 
    annView.canShowCallout = YES; 

} 

return annView; 

}

Antwort

6

ich es gelöst!

Es geht um die Stringlänge von titleLabel. Wenn die Zeichenfolgenlänge 20-25 Zeichen überschreitet, wird die linke und rechte Zubehöransicht nach oben verschoben.

Zuerst habe ich die Zeichenfolge beschnitten, die auf der Titel- oder Untertitelbezeichnung angezeigt wird. Danach verketten Sie "..." als String am Ende des Strings.

Lösung ist ein wenig hack, aber es funktioniert wie Charme.

+2

Es klingt wie Fehler in iOS 8, wenn es so zu beheben ist. – Ramis

+2

Die 'leftCalloutAccessoryView' ist automatisch so eingerichtet, dass der linke Rand und der obere Rand gleich sind. Und es ist vertikal zentriert mit einer Priorität von 250. Die Kompressionswiderstandspriorität des Etiketts ist jedoch '750'. Wenn also die Beschriftung abgeschnitten werden muss, wird die linke Callout-Ansicht nach links verschoben, wodurch sie ebenfalls nach oben verschoben wird. –

0

Ich machte das wie folgt. Muss den Code polieren, aber für mich funktioniert es.

- (UIView*)rightCalloutAccessoryView { 
    UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    return [self parentViewForView:rightButton]; 
} 

- (UIView*)parentViewForView:(UIView*)view { 
#ifdef __IPHONE_8_0 
    CGRect rr = view.frame; 
    rr.origin.x = 2.0f; 
    rr.origin.y = (64.0f - rr.size.height)/2.0f; 
    view.frame = rr; 
    UIView *result = [[UIView alloc] initWithFrame:CGRectMake(0, 0, rr.size.width + 4.0f, 64.0f)]; 
    [result addSubview:view]; 
    return result; 
#else 
    return view; 
#endif 
} 
0

Wenn Sie eine customizedView anpassen möchten, um die leftCalloutAccessoryView implementiert, dass Sie die Breite unter 225.0f gewesen zu verfeinern haben (das bessere Setup ist 220.0f) auf dem iPhone 4, 4S, 5, 5+.

zum Beispiel:

UIView *_customContentView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 38.0f)]; 
view.leftCalloutAccessoryView = _customContentView; 

Das ist meine Erfahrung gelöst ist.

Verwandte Themen