Я тестировал работу существующего приложения в Mojave и обнаружил странную проблему с макетом. Отключить видимость панели инструментов окна, а затем снова включить, чтобы панель инструментов отображалась поверх содержимого вместо нажатия на нее вниз.
Отрывок:
CustomPopUp *popup = [CustomPopUp popup];
__weak CustomRevealViewController *rev = self.revealViewController;
__weak NSWindow *window = self.view.window;
// Called when user taps in the popup view
[popup setCloseAction:^(BOOL success){
[rev removeOverlayController];
// !!! After this layout breaks
[window.toolbar setVisible:YES];
}];
[window.toolbar setVisible:NO];
[self.revealViewController showOverlayController:popup];
Есть идеи, что может вызвать проблему и как ее исправить?
Редактировать 1:
Я создал простой проект здесь .
Шаги для воспроизведения:
- Запустить проект с бета-версией Xcode 10 (Требуется Mac OSX Mojave)
- Нажмите кнопку «Скрыть панель инструментов». Это скроет панель инструментов и
обновить заголовок кнопки.
- Нажмите «Показать панель инструментов»
Resut:
Панель инструментов выглядит сломанной. Это над контроллером.
Ожидаемый результат:
Должно работать как на любой другой версии ОС. Верхнее ограничение контроллера должно быть перемещено вниз.
Редактировать 2:
Возможно, я нашел подсказку в Замечаниях по выпуску AppKit для macOS 10.14 beta в разделе Layer-Backed * .
Представления, которые неявно зависят от перерисовки, когда предок,
потомок или пересекающийся родной брат перерисовывается, перерисовываться не может. Как
раньше, если необходимо перерисовать представление, установите его свойство needsDisplay
ДА. Представления, которые возвращают YES из wantUpdateLayer, обычно
данный эксклюзивный слой, даже если свойство viewLayer вида
установить на NO. Приложения, ориентированные на macOS 10.14, должны отдавать предпочтение
Свойство wantUpdateLayer над свойством wantLayer.
Я все еще не уверен, как это исправить.
Редактировать 3:
С официальным выпуском Мохаве это больше не проблема. Спасибо, я очень ценю вашу помощь.