Индикатор изменения NSWindow не отображается

Как показать resize indicators для NSWindow без заголовка?


Я создал новый проект Xcode (для Mac) с раскадрой. Я просто отключил флажок Title Bar в Appearance (он скрывает строку заголовка NSwindow).

Странная вещь, после отключения TitleBar, NSWindow не показывал индикаторы изменения размера, в то время как мышь была выше краев окна. Хотя, если я перетаскиваю по краям, он изменил размер.

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


image

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

Ответ 1

Я исправил эту проблему путем подклассификации NSWindow и переопределения canBecomeKeyWindow для возврата YES:

#import "MyWindow.h"

@implementation MyWindow

- (BOOL)canBecomeKeyWindow {
    return YES;
}

@end

Не обновлять курсоры размера в этом случае выглядит как ошибка Apple. Состояние документа: "Значение свойства canBecomeKeyWindow YES, если в окне есть строка заголовка или панель изменения размера или NO в противном случае.", Поэтому я ожидаю, что canBecomeKeyWindow вернет YES для изменяемого размера окна. Но это не так.

UPD: проверено 10.10.5. Надеемся, что вы будете иметь такое же поведение на 10.11.

Ответ 2

Я не проверял это, но вы можете установить индикаторы изменения размера вручную. Я думаю, я бы добавил четыре NSTrackingAreas в подкласс windowsViewView (по одному для каждой стороны окна, всего несколько пикселей по высоте/ширине). В методе mouseEntered() создайте новый объект NSCursor для соответствующей позиции мыши. Помните, что позиция может измениться, поэтому используйте метод mouseMoved(). На mouseExited() reset курсор.

Опять же, я этого не пробовал, но он должен работать.

PS: Не забудьте записать на него радар;)

Ответ 3

то же самое в Мохаве 10,14