Индикатор изменения 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