指南针放置或在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调整到每个设备或元素。