2015-10-16 19 views
10

Làm cách nào để hiển thị resize indicators cho NSWindow không có Thanh tiêu đề?NSWindow chỉ báo thay đổi kích cỡ không hiển thị


Tôi đã tạo một dự án Xcode mới (cho ứng dụng Mac) với bảng phân cảnh. Tôi vừa vô hiệu hóa hộp kiểm Title Bar trong Giao diện (Nó ẩn thanh Tiêu đề của NSwindow).

Điều kỳ lạ là, sau khi vô hiệu hóa TitleBar, NSWindow không hiển thị các chỉ báo thay đổi kích thước khi chuột ở trên các cạnh của cửa sổ. Mặc dù nếu tôi kéo ở cạnh nó đã được thay đổi kích thước.

Tôi đoán đây là lỗi, vì nếu cửa sổ có thể được thay đổi kích cỡ bằng cách kéo chuột qua các cạnh, cửa sổ phải hiển thị các chỉ báo thay đổi kích thước.


image

Vì nó có thể được nhìn thấy trong các hình ảnh, các chỉ số thay đổi kích thước được nhìn thấy sau khi người dùng kéo cửa sổ, nhưng nhiều người dùng sẽ nghĩ rằng vì không có chỉ số thay đổi kích thước, cửa sổ là không thay đổi kích thước .

+0

Bạn có đang đặt khu vực theo dõi chuột không? Bạn có đang cập nhật vùng theo dõi chuột sau khi thay đổi kích thước không? – l00phole

Trả lời

2

Tôi đã khắc phục vấn đề này bằng cách subclassing NSWindow và trọng canBecomeKeyWindow trở YES:

#import "MyWindow.h" 

@implementation MyWindow 

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

@end 

Không cập nhật thay đổi kích thước con trỏ trong trường hợp này trông giống như lỗi của Apple. Tài liệu tuyên bố "Giá trị của tài sản canBecomeKeyWindowYES nếu cửa sổ có thanh tiêu đề hoặc thanh đổi kích thước hoặc NO nếu không.", Vì vậy tôi mong rằng canBecomeKeyWindow sẽ trả lại YES cho cửa sổ có thể thay đổi kích thước. Nhưng nó không.

UPD: Đã kiểm tra trên 10.10.5. Hy vọng rằng, bạn sẽ có hành vi tương tự trên 10.11.

1

Tôi chưa kiểm tra điều này, nhưng bạn có thể đặt các chỉ số thay đổi kích thước theo cách thủ công. Tôi nghĩ rằng tôi sẽ thêm bốn NSTrackingAreas vào các cửa sổ contentView subclass (một cho mỗi bên của cửa sổ, chỉ có vài pixel chiều cao/chiều rộng). Trong phương thức mouseEntered(), tạo một đối tượng NSCursor mới cho vị trí chuột thích hợp. Hãy nhớ rằng vị trí có thể thay đổi, vì vậy hãy sử dụng phương thức mouseMoved(). Trên mouseExited() đặt lại con trỏ.

Một lần nữa, tôi chưa thử điều này, nhưng nó sẽ hoạt động.

PS: Đừng quên nộp radar về vấn đề này;)

Các vấn đề liên quan