MKMapView的ContentInset

时间:2014-11-27 00:28:21

标签: objective-c mkmapview

UIScrollView有一个很好的contentInset属性,告诉视图,哪个部分在屏幕上可见。我有一个半透明视图部分覆盖的MKMapView。我希望地图在视图下可见。我必须在地图上显示几个注释,并且我想使用-setRegion:animated:缩放它们,但是地图视图不尊重它被部分覆盖,因此我的一些注释将被半透明视图覆盖。

enter image description here

有没有办法告诉地图,像滚动视图一样使用contentInset进行计算?


更新:这是我尝试过的:

- (MKMapRect)mapRectForAnnotations
{
    if (self.trafik) {
        MKMapPoint point = MKMapPointForCoordinate(self.trafik.coordinate);
        MKMapPoint deltaPoint;

        if (self.map.userLocation &&
            self.map.userLocation.coordinate.longitude != 0) {
            MKCoordinateSpan delta = MKCoordinateSpanMake(fabsf(self.trafik.coordinate.latitude-self.map.userLocation.coordinate.latitude),
                                                          fabsf(self.trafik.coordinate.longitude-self.map.userLocation.coordinate.longitude));
            deltaPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(delta.latitudeDelta, delta.longitudeDelta));
        } else {
            deltaPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(0.01, 0.01));
        }

        return MKMapRectMake(point.x, point.y, deltaPoint.x, deltaPoint.y);
    } else {
        return MKMapRectNull;
    }
}

2 个答案:

答案 0 :(得分:4)

使用UIViews的{​​{1}}。

例如这将迫使当前用户的位置图钉向上移动 50pts

layoutMargins

答案 1 :(得分:3)

您可以执行以下操作,但可能会混淆使用UIViewController的{​​{1}}中的其他观看次数。您必须对其进行测试才能找到答案。

覆盖将您的地图作为子视图的bottomLayoutGuide中的bottomLayoutGuide,并返回一个如下所示的UIViewController对象:

MyLayoutGuide

@interface MyLayoutGuide : NSObject <UILayoutSupport> @property (nonatomic) CGFloat length; -(id)initWithLength:(CGFloat)length; @end @implementation MyLayoutGuide @synthesize length = _length; @synthesize topAnchor = _topAnchor; @synthesize bottomAnchor = _bottomAnchor; @synthesize heightAnchor = _heightAnchor; - (id)initWithLength:(CGFloat)length { if (self = [super init]) { _length = length; } return self; } @end bottomLayoutGuide分为MKMapView点:

50

你可以强迫这个&#34;插入&#34;如果底部的时间表更改大小,请在- (id)bottomLayoutGuide { CGFloat bottomLayoutGuideLength = 50.f; return [[MyLayoutGuide alloc] initWithLength:bottomLayoutGuideLength]; } 上致电setNeedsLayout再次计算。我们在MKMapView子类中创建了一个帮助器,可以从父MKMapView调用:

UIViewController

根据this answer改编的答案。