У меня возникает странная проблема с MKMapView, размещенным в представлении с помощью панели навигации. Учитывая, что UIScrollView в той же ситуации, чья ширина, высота и центр ограничены этим супервизом (объект контроллера view
), вставки будут скорректированы, если для свойства контроллера automaticallyAdjustsScrollViewInsets
установлено значение YES
, а не если установлено значение NO
. Это здорово. Я не могу найти эту документацию где-нибудь, но вид карты, похоже, делает то же самое, но ее невозможно отключить. Настройка automaticallyAdjustsScrollViewInsets
не влияет.
Вкратце (ish):
На изображении ниже маленький задний квадрат центрирован в пределах представления, независимо от панели навигации. Вид карты также ограничен точно размером представления (он простирается за панель навигации). Расположение карты было установлено как текущее местоположение (также обозначенное синим кругом), поэтому я ожидаю, что они совпадут, но они отключены на половину общей высоты состояния и навигационных баров.
Есть ли объяснение этого поведения и способ заставить его работать как ожидалось?
Это очень странно, потому что 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];
Либо настраивая нижнюю вставку, либо добавив отрицательную вставку вверх, все выстраивается в очередь, но она будет ломаться, если это поведение отображения карты изменится или если контроллер вида представлен без панели навигации или если есть сильный ветер. Это также разрушает мою уверенность в том, что вы вернете правильные координаты из вида карты.