2010-12-22 41 views
10

Tôi có một NSScrollView chứa một NSImageView, thay đổi kích thước dựa trên các yếu tố khác nhau. Khi nó thay đổi kích thước, tôi thường thay đổi hình ảnh, vì vậy tôi cuộn NSScrollView lên trên cùng. Điều này hoạt động tốt. Tuy nhiên, khi tôi bắt đầu cuộn NSScrollView một lần nữa, nó di chuyển một vài điểm ảnh và sau đó (hầu hết thời gian) nhảy xuống dưới cùng của cuộn. Sau khi nó nhảy một lần, nó hoạt động như bình thường cho đến khi tôi di chuyển con lăn lên trên một lần nữa. Điều này khiến tôi phát điên. Tất cả những gì tôi thực sự làm là:NSScrollView nhảy xuống dưới trên cuộn

[_imageView setImage: anNSImage]; 

NSRect frame; 

NSSize imageSize = [anNSImage] size]; 
frame.size = imageSize; 
frame.origin = NSZeroPoint; 

[_imageView setFrame: frame]; 
[[_mainScrollview contentView] scrollToPoint: NSMakePoint(0, [_imageView frame].size.height - [_mainScrollview frame].size.height)]; 
+0

Tôi nhận xét với hy vọng rằng câu hỏi này sẽ được chú ý bởi một người nào đó, bởi vì tôi đang khá tuyệt vọng. NSScrollView của tôi bây giờ được lật, hoạt động tốt hơn, bởi vì tôi chỉ có thể tránh làm scrollToPoint hoàn toàn. Trong trường hợp này, các điểm di chuyển vẫn tĩnh khi tôi thay đổi nội dung, vì vậy nếu nó ở trên cùng khi tôi chuyển đổi, nó vẫn ở lại. –

+0

Tuy nhiên, tôi vẫn muốn đặt nó ban đầu. Tôi đặt nó một lần, nó thay đổi vị trí, tôi bắt đầu cuộn, nó nhảy xuống đáy. Tôi đã thử thiết lập reflectScrolledClipView, vô ích. –

+0

Tôi gặp vấn đề gần giống như của bạn, bất kỳ ai cũng có thể trợ giúp? http://stackoverflow.com/questions/6596567/synchronize-two-nsscrollview – disorderdev

Trả lời

-4

Bạn đặt scrollView.contentOffset = CGPointMake (0,0). Hoặc theo yêu cầu của bạn. Đặt contectoffset sau khi bạn thay đổi hình ảnh.

+2

Chỉ UIScrollView có thuộc tính contentOffset. NSScrollView thì không. –

0

Giải pháp hacky của tôi. Bật hiển thị dọc Scroller (như Chetan nói, đây là những gì gây nên lỗi). Gửi xem bảng trở lại. Mở rộng cạnh trái của chế độ xem bảng cho đến khi cuộn được bao phủ bởi bất kỳ thứ gì ở cạnh phải của nó.

8

Nick, cảm ơn mã của bạn. Tôi đã sửa đổi mã của bạn và nó hoạt động tốt ngay bây giờ. Trước tiên, bạn cần phải cuộn cuộn dọc lên trên. Thứ hai, cuộn chế độ xem nội dung.

// Scroll the vertical scroller to top 
    if ([_scrollView hasVerticalScroller]) { 
     _scrollView.verticalScroller.floatValue = 0; 
    } 

    // Scroll the contentView to top 
    [_scrollView.contentView scrollToPoint:NSMakePoint(0, ((NSView*)_scrollView.documentView).frame.size.height - _scrollView.contentSize.height)]; 
+0

Cảm ơn! Nó làm việc cho tôi! – Developer

+0

Làm việc hoàn hảo cho tôi, cảm ơn! – Chris

+0

Cảm ơn! gah đây là điều cuối cùng đã làm việc ... bây giờ tôi cần phải hiểu tại sao scrollToPoint: hoạt động mọi lúc, nhưng scrollPoint: và scrollRectToVisible: đôi khi có vấn đề. –

3

Để tránh lỗi này, bạn chỉ cần bật các cuộn và sau đó đặt thuộc tính ẩn của các thanh cuộn. Vì NSScrollers kế thừa từ NSView, điều này chỉ khiến chúng không hiển thị chính mình:

Làm việc cho tôi ít nhất. Chỉ được thử nghiệm trên OS 10.7.2.

Có ai có radar được đăng trên btw này không? Họ sẽ không sửa nó nếu không ai nói với họ. :)

+1

Công trình này, nhưng bạn phải cẩn thận khi bạn đặt thuộc tính 'ẩn'. Rõ ràng, 'windowDidLoad' là quá sớm, ví dụ. – jmk

2

Dường như tôi có thể sử dụng reflectScrolledClipView: thay vì đặt giá trị của trình cuộn để đồng bộ hóa vị trí. Ví dụ

[self.scrollView.contentView scrollToPoint:NSMakePoint(300, 0)]; 
[self.scrollView reflectScrolledClipView:self.scrollView.contentView]; // synced then 
0

trên macOS Sierra, [_scrollView.contentView scrollToPoint:]; đã lỗi và gây nhấp nháy thất thường. Tuy nhiên, việc sử dụng [_scrollView.documentView scrollPoint:] đã xóa tất cả các vấn đề đó cho tôi. Đây cũng là phương pháp được đề xuất bởi Apple trong hướng dẫn của họ được tìm thấy here.

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