罗盘在地图视图中的放置或位置iOS6
有人知道如何更改指南针在MKMapview中的位置吗 我说的是指南针,当它旋转时会出现在地图的右上角 我这样做是为了让你能在导航栏下面看到模糊的地图,这意味着帧的y原点将在导航栏下面。问题是,当地图旋转时,它会自动在右上角添加指南针按钮,正如您在下面的屏幕截图中所看到的,导航栏会覆盖该按钮罗盘在地图视图中的放置或位置iOS6,ios,swift,cocoa-touch,mkmapview,Ios,Swift,Cocoa Touch,Mkmapview,有人知道如何更改指南针在MKMapview中的位置吗 我说的是指南针,当它旋转时会出现在地图的右上角 我这样做是为了让你能在导航栏下面看到模糊的地图,这意味着帧的y原点将在导航栏下面。问题是,当地图旋转时,它会自动在右上角添加指南针按钮,正如您在下面的屏幕截图中所看到的,导航栏会覆盖该按钮 我没有看到任何关于指南针的文档,有人有什么想法吗?我的测试表明,MKMapView不知怎么知道它是在什么上下文中显示的。如果使用常规UINavigationController,即使指南针是半透明的,也会将
我没有看到任何关于指南针的文档,有人有什么想法吗?我的测试表明,
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
这将按44点插入布局参考线。而MKMapView
将使用这些值将指南针定位在顶部,将“合法”标签定位在底部
您现在必须注意的一件事是,您不能再在自动布局视觉格式语言中使用布局指南 使用iOS 8,您可以简单地执行以下操作:
[someMapView setLayoutMargins:UIEdgeInsetsMake(20, 0, 20, 0)];
Swift:
mapView.layoutMargins = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0)
其中,您可以计算UI元素的高度,而不是20,以获得一个更动态的解决方案来调整每个设备或元素。一个小的补充:MKMapView还使用布局指南来定义地图的中心。如果我的地图视图直接在view controller的视图中,但是如果它是层次结构中更深一层的话,它似乎忽略了这些值。如果我的视图有一个包含地图的滚动视图,那么我必须将此代码放在哪里?@gklka尚未测试您的要求。但我的经验是,
UIScrollView
s在布局指南和地图视图方面是“邪恶的”。当您找到解决方案时,请告诉我,我会更新我的答案。您的解决方案对我来说非常有效,但添加正确的边距似乎不起作用。有什么想法吗?我试过:-(id)rightLayoutGuide{…}@Klaas为什么要创建MiFixedLayoutGuide类?为什么不让包含mapView的视图控制器符合。然后在其中实现length(),返回值为44。对于topLayoutGuide()和bottomLayoutGuide,返回self(包含贴图的视图控制器)。我认为没有必要使用MiFixedLayoutGuide类。但在实现此解决方案后,地图上的“合法”标签是否存在问题。若我们将地图上的“合法”标签改为“指南针”,它也会被移动。在我的例子中,当我试图改变指南针的位置时,“合法”标签也会被移动并显示在地图的中心位置。如果指南针与地图上添加的任何其他组件重叠,是否有办法将指南针置于顶部(置于前面)。例如,地图上的按钮在swift 4中工作完美
mapView.layoutMargins = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0)