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

Вкладки MKMapView с панелью навигации

У меня возникает странная проблема с MKMapView, размещенным в представлении с помощью панели навигации. Учитывая, что UIScrollView в той же ситуации, чья ширина, высота и центр ограничены этим супервизом (объект контроллера view), вставки будут скорректированы, если для свойства контроллера automaticallyAdjustsScrollViewInsets установлено значение YES, а не если установлено значение NO. Это здорово. Я не могу найти эту документацию где-нибудь, но вид карты, похоже, делает то же самое, но ее невозможно отключить. Настройка automaticallyAdjustsScrollViewInsets не влияет.

Вкратце (ish):

На изображении ниже маленький задний квадрат центрирован в пределах представления, независимо от панели навигации. Вид карты также ограничен точно размером представления (он простирается за панель навигации). Расположение карты было установлено как текущее местоположение (также обозначенное синим кругом), поэтому я ожидаю, что они совпадут, но они отключены на половину общей высоты состояния и навигационных баров.

Есть ли объяснение этого поведения и способ заставить его работать как ожидалось?

Screenshot of MKMapView acting a fool

Это очень странно, потому что MKMapView не является подклассом UIScrollView, но в этом случае он ведет себя как один. Это не совсем необоснованно, но я бы ожидал, что автоматические корректирующие вставки будут работать последовательно на виде карты и в режиме прокрутки.

Обход

Что-то ужасное, как это, "решит проблему":

MKCoordinateRegion region = MKCoordinateRegionMake(self.coordinate, MKCoordinateSpanMake(0.008, 0.008));
MKMapRect mapRect = MKMapRectForCoordinateRegion(region);
[self.mapView setVisibleMapRect:mapRect edgePadding:UIEdgeInsetsMake(0, 0, 64, 0) animated:YES];

Либо настраивая нижнюю вставку, либо добавив отрицательную вставку вверх, все выстраивается в очередь, но она будет ломаться, если это поведение отображения карты изменится или если контроллер вида представлен без панели навигации или если есть сильный ветер. Это также разрушает мою уверенность в том, что вы вернете правильные координаты из вида карты.

4b9b3361

Ответ 1

MKMapView действительно находится под навигационной панелью, но автоматически использует контроллер вида корпуса topLayoutGuide для смещения аннотаций, просмотра компаса и т.д. вниз из-под него.

Вы должны убедиться, что ваши собственные взгляды учитывают это в их коде автоотключения.

Ответ 2

Если вы взглянете на это, вы увидите, что mapview, скорее всего, не будет находиться под панелью навигации, как вы думаете. Он находится между нижней частью навигационной панели и нижней частью супервизора.

С другой стороны, панель навигации полупрозрачна по умолчанию, поэтому, если mapview действительно сидел под навигационной панелью, вы могли бы просмотреть ее, считая, что вы не отключили поведение навигационной панели по умолчанию.

enter image description here