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

有没有人知道一种方法来改变在MKMapview指南针的位置?

我正在谈论地图旋转时出现在地图右上angular的指南针。

我正在做,所以你可以看到导航栏下方的地图模糊,这意味着框架的y原点将在导航栏下方。 问题是,当地图旋转时,会自动在右上angular添加指南针button,并且可以在下面的屏幕截图中看到(navBar所覆盖的)。

截图

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

我的testing显示, MKMapView以某种方式知道它在什么环境下显示。 如果您使用常规的UINavigationController ,则即使在半透明状态下,也可以将罗盘定位在导航栏下方。

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

可悲的是,你不能真正影响苹果用不同内容计算这个属性的价值。 这也取决于状态栏的可见性。

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

 @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]; } 

这使得布局指南减less了44分。 MKMapView将使用这些值将指南针放置在顶部,底部则显示“Legal”标签。

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

有了iOS 8,你可以简单的做到:

 [someMapView setLayoutMargins:UIEdgeInsetsMake(20, 0, 20, 0)]; 

迅速:

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

而不是20,你可以计算你的用户界面元素的高度,有一个更dynamic的解决scheme调整到每个设备或元素。