23

有谁知道改变指南针在 MKMapview 中的位置的方法?

我说的是旋转时显示在地图右上角的指南针。

我这样做是为了让您可以看到导航栏下方的地图模糊不清,这意味着框架的 y 原点将位于导航栏下方。问题是当地图旋转时,它会自动在右上角添加指南针按钮,正如您可以(有点)在下面的屏幕截图中看到的那样,它被导航栏覆盖。

截屏

我还没有看到任何关于指南针的文档,有人有什么想法吗?

4

3 回答 3

17

我的测试表明,MKMapView不知何故知道它在什么上下文中显示。如果您使用常规UINavigationController,即使指南针是半透明的,您也会将指南针置于导航栏下方。

iOS 7 中有一个新UIViewController属性,它定义了 Y 轴上实际内容的开始。它被称为topLayoutGuide

遗憾的是,您无法真正影响 Apple 用于在不同内容中计算此属性的值。它还取决于状态栏的可见性。

但是:为了解决这个问题,我创建了一个简单的自定义对象,我在自定义视图控制器中返回:

@interface MiFixedLayoutGuide : NSObject <UILayoutSupport>
@property (nonatomic) CGFloat pbLength;
- (id)initWithLength:(CGFloat)length;
@end

@implementation MiFixedLayoutGuide

- (id)initWithLength:(CGFloat)length {
    self = [super init];
    if (self) {
        _pbLength = length;
    }
    return self;
}

- (CGFloat)length {
    return _pbLength;
}

@end

然后我在我的UIViewController子类中覆盖了以下两个方法:

- (id<UILayoutSupport>)topLayoutGuide {
    return [[MiFixedLayoutGuide alloc]initWithLength:44];
}

- (id<UILayoutSupport>)bottomLayoutGuide {
    return [[MiFixedLayoutGuide alloc]initWithLength:44];
}

这会将布局指南插入 44 个点。并且MKMapView将使用这些值将指南针定位在顶部,并将“法律”标签定位在底部。

您现在必须注意的一件事是,您不能再在自动布局视觉格式语言中使用布局指南。

于 2013-09-19T20:21:19.563 回答
16

使用 iOS 8,您可以简单地执行以下操作:

[someMapView setLayoutMargins:UIEdgeInsetsMake(20, 0, 20, 0)];
于 2015-09-13T15:33:35.197 回答
6

迅速:

mapView.layoutMargins = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0)

您可以计算您的 UI 元素高度而不是 20,以获得更动态的解决方案来调整每个设备或元素。

于 2016-03-31T18:55:06.997 回答