Ios UIImageView作为详图索引';s leftCalloutAccessoryView自动移动左上角

Ios UIImageView作为详图索引';s leftCalloutAccessoryView自动移动左上角,ios,objective-c,ios8,mkannotation,mkannotationview,Ios,Objective C,Ios8,Mkannotation,Mkannotationview,它在iOS 7上运行得很好,但UIImageView在iOS 8上的位置会发生变化,如下图所示。此外,右详图索引辅助视图位置会移动右上角 有人能帮忙吗 干杯 在iOS 7中 在iOS 8中 -(无效)地图视图:(MKMapView*)地图视图未选择注释视图:(MKAnnotationView*)视图 { } -(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{ MKPinAnnotationView *annView=[[MKPinAnnot

它在iOS 7上运行得很好,但UIImageView在iOS 8上的位置会发生变化,如下图所示。此外,右详图索引辅助视图位置会移动右上角

有人能帮忙吗

干杯

在iOS 7中

在iOS 8中

-(无效)地图视图:(MKMapView*)地图视图未选择注释视图:(MKAnnotationView*)视图 {

}

-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{

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;
}我解决了

都是关于titleLabel的字符串长度。如果字符串长度超过20-25个字符,则左右附件视图向上移动

首先,我修剪了标题标签或副标题标签上显示的字符串。之后,将“…”作为字符串连接到字符串末尾


这个解决方案有点像黑客,但它很有魅力。

我做了这样的修复。需要润色代码,但对我来说它是有效的

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

如果您想自定义leftCalloutAccessoryView,则必须在iPhone 4、4S、5、5+上优化宽度低于225.0f(更好的设置是220.0f)的自定义视图

例如:

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

这就是我解决问题的经验。

如果需要这样修复,听起来像iOS 8中的bug。
leftCalloutAccessoryView
设置了自动布局,使其左边距和上边距相同。它垂直居中,优先级为
250
。但是,标签的抗压性优先级为
750
。因此,如果标签必须截断,它会将左侧详图索引视图向左推,从而使其也向上移动。
UIView *_customContentView    = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 38.0f)];
view.leftCalloutAccessoryView = _customContentView;