Подтвердить что ты не робот

Размещение компаса или позиция на карте iOS6

Кто-нибудь знает, как изменить размещение компаса в MKMapview?

Я говорю о компасе, который появляется в верхнем правом углу карты, когда он поворачивается.

Я делаю это так, чтобы вы могли видеть, что карта размыта под навигационной панелью, что означает, что начало координат y будет находиться под навигационной панелью. Проблема в том, что когда карта повернута, она автоматически добавляет кнопку компаса в верхнем правом углу и, как вы можете видеть (вид) на скриншоте ниже, который покрывается navBar.

screenshot

Я не видел никакой документации о компасе, у кого-нибудь есть идеи?

4b9b3361

Ответ 1

Мои тесты показали, что 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" внизу.

Одна вещь, на которую вы должны обратить внимание, заключается в том, что вы больше не можете использовать руководства по макету на языке автоматического отображения макета.

Ответ 2

С iOS 8 вы можете просто:

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

Ответ 3

Swift:

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

Где вместо 20 вы можете рассчитать высоту элементов пользовательского интерфейса, чтобы иметь более динамическое решение, настраиваемое для каждого устройства или элемента.