2014-09-21 8 views
7

Funziona perfettamente su iOS 7 ma la posizione di UIImageView si sposta su immagini simili a iO8 di seguito. Anche rightCalloutAccessoryView sposta la posizione nell'angolo in alto a destra.UIImageView come callout leftCalloutAccessoryView sposta automaticamente l'angolo in alto a sinistra

Qualcuno può aiutare?

Cheers.

In iOS 7

iOS 7

In iOS 8

iOS8

- (void) MapView: (MKMapView *) MapView didSelectAnnotationView: (MKAnnotationView *) vista {

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) {annotazione

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; 

}

risposta

6

ho risolto!

È tutta una questione di lunghezza della stringa di titleLabel. Se la lunghezza della stringa supera i 20-25 caratteri, la vista accessorio sinistra e destra si sposta verso l'alto.

Innanzitutto, ho ritagliato la stringa mostrata sull'etichetta del titolo o sull'etichetta dei sottotitoli. Dopo, concatena "..." come stringa alla fine della stringa.

Soluzione è un po 'mod, ma funziona come un fascino.

+2

Sembra un bug in iOS 8 se è necessario correggerlo in questo modo. – Ramis

+2

Il 'leftCalloutAccessoryView' ha impostato l'autolayout in modo tale che il margine sinistro e il margine superiore siano gli stessi. Ed è centrato verticalmente con una priorità di '250'. Tuttavia, la priorità della resistenza alla compressione dell'etichetta è '750'. Quindi, se l'etichetta deve troncare, sposterà a sinistra la vista del callout, il che lo farà spostare verso l'alto. –

0

Ho risolto il problema in questo modo. Ha bisogno di lucidare il codice, ma per me funziona.

- (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

Se si desidera personalizzare il leftCalloutAccessoryView essere implementato un customizedView che si deve affinare la larghezza di stato sotto 225.0f (l'impostazione migliore è 220.0f) su iPhone 4, 4S, 5, 5+.

ad esempio:

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

Questa è la mia esperienza risolto.

Problemi correlati