Поддержка видимости панели инструментов в macOS 10.14 Mojave - PullRequest
0 голосов
/ 03 июля 2018

Я тестировал работу существующего приложения в 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:

Я создал простой проект здесь .

Шаги для воспроизведения:

  1. Запустить проект с бета-версией Xcode 10 (Требуется Mac OSX Mojave)
  2. Нажмите кнопку «Скрыть панель инструментов». Это скроет панель инструментов и обновить заголовок кнопки.
  3. Нажмите «Показать панель инструментов»

Resut:

Панель инструментов выглядит сломанной. Это над контроллером.

Ожидаемый результат:

Должно работать как на любой другой версии ОС. Верхнее ограничение контроллера должно быть перемещено вниз.

Редактировать 2:

Возможно, я нашел подсказку в Замечаниях по выпуску AppKit для macOS 10.14 beta в разделе Layer-Backed * .

Представления, которые неявно зависят от перерисовки, когда предок, потомок или пересекающийся родной брат перерисовывается, перерисовываться не может. Как раньше, если необходимо перерисовать представление, установите его свойство needsDisplay ДА. Представления, которые возвращают YES из wantUpdateLayer, обычно данный эксклюзивный слой, даже если свойство viewLayer вида установить на NO. Приложения, ориентированные на macOS 10.14, должны отдавать предпочтение Свойство wantUpdateLayer над свойством wantLayer.

Я все еще не уверен, как это исправить.

Редактировать 3: С официальным выпуском Мохаве это больше не проблема. Спасибо, я очень ценю вашу помощь.

1 Ответ

0 голосов
/ 22 октября 2018

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

Окно с панелью инструментов имеет неправильный макет в официальном выпуске Mojave (вид отображается под панелью инструментов). Чтобы это исправить, я скрываю и снова показываю панель инструментов окна:

- (void)viewWillAppear
{
    [super viewWillAppear];
    if (_firstTime) {
        _firstTime = NO;
        NSWindow *window = self.view.window;

        window.toolbar.visible = NO;
        window.toolbar.visible = YES;
    }
 }
...