UIScrollView
有一个很好的contentInset
属性,告诉视图,哪个部分在屏幕上可见。我有一个半透明视图部分覆盖的MKMapView
。我希望地图在视图下可见。我必须在地图上显示几个注释,并且我想使用-setRegion:animated:
缩放它们,但是地图视图不尊重它被部分覆盖,因此我的一些注释将被半透明视图覆盖。
有没有办法告诉地图,像滚动视图一样使用contentInset
进行计算?
更新:这是我尝试过的:
- (MKMapRect)mapRectForAnnotations
{
if (self.trafik) {
MKMapPoint point = MKMapPointForCoordinate(self.trafik.coordinate);
MKMapPoint deltaPoint;
if (self.map.userLocation &&
self.map.userLocation.coordinate.longitude != 0) {
MKCoordinateSpan delta = MKCoordinateSpanMake(fabsf(self.trafik.coordinate.latitude-self.map.userLocation.coordinate.latitude),
fabsf(self.trafik.coordinate.longitude-self.map.userLocation.coordinate.longitude));
deltaPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(delta.latitudeDelta, delta.longitudeDelta));
} else {
deltaPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(0.01, 0.01));
}
return MKMapRectMake(point.x, point.y, deltaPoint.x, deltaPoint.y);
} else {
return MKMapRectNull;
}
}
答案 0 :(得分:4)
使用UIViews
的{{1}}。
例如这将迫使当前用户的位置图钉向上移动 50pts 。
layoutMargins
答案 1 :(得分:3)
您可以执行以下操作,但可能会混淆使用UIViewController
的{{1}}中的其他观看次数。您必须对其进行测试才能找到答案。
覆盖将您的地图作为子视图的bottomLayoutGuide
中的bottomLayoutGuide
,并返回一个如下所示的UIViewController
对象:
MyLayoutGuide
@interface MyLayoutGuide : NSObject <UILayoutSupport>
@property (nonatomic) CGFloat length;
-(id)initWithLength:(CGFloat)length;
@end
@implementation MyLayoutGuide
@synthesize length = _length;
@synthesize topAnchor = _topAnchor;
@synthesize bottomAnchor = _bottomAnchor;
@synthesize heightAnchor = _heightAnchor;
- (id)initWithLength:(CGFloat)length
{
if (self = [super init]) {
_length = length;
}
return self;
}
@end
将bottomLayoutGuide
分为MKMapView
点:
50
你可以强迫这个&#34;插入&#34;如果底部的时间表更改大小,请在- (id)bottomLayoutGuide
{
CGFloat bottomLayoutGuideLength = 50.f;
return [[MyLayoutGuide alloc] initWithLength:bottomLayoutGuideLength];
}
上致电setNeedsLayout
再次计算。我们在MKMapView
子类中创建了一个帮助器,可以从父MKMapView
调用:
UIViewController
根据this answer改编的答案。