指南针在iOS6后的地图视图中放置或定位

时间:2013-09-19 19:56:41

标签: ios swift cocoa-touch mkmapview

有没有人知道如何在MKMapview中更改指南针的位置?

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

我正在制作它,以便您可以看到导航栏下面的地图模糊,这意味着框架的y原点将位于导航栏下方。问题是,当地图旋转时,它会自动在右上角添加指南针按钮,您可以(如此)在下面的屏幕截图中看到,这是由navBar覆盖的。

screenshot

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

2 个答案:

答案 0 :(得分: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将使用这些值将罗盘定位在顶部,将“Legal”标签置于底部。

您现在必须注意的一件事是,您无法在自动布局可视化格式语言中使用布局指南。

答案 1 :(得分:4)

<强>夫特:

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

在20而不是20的情况下,您可以计算UI元素高度,以便根据每个设备或元素调整更具动态性的解决方案。