2014-12-20 19 views
7

Tôi đang làm việc trên Xcode 6.1.1 trên OSX 10.10. Tôi đang thử các bảng phân cảnh cho các ứng dụng Mac. Tôi có một NSTabViewController sử dụng NSTabViewControllerTabStyleToolbartabStyle mới và nó được đặt làm bộ điều khiển xem mặc định cho bộ điều khiển cửa sổ. Làm cách nào để đặt lại kích thước cửa sổ của tôi theo bộ điều khiển chế độ xem được chọn hiện tại?Thay đổi kích thước cửa sổ để xem kích thước bộ điều khiển trong bảng phân cảnh

Có thể làm hoàn toàn trong Trình tạo giao diện không? Đây là những gì kịch bản của tôi trông giống như: storyboard

Trả lời

10

Câu trả lời bố cục tự động là một nửa trong số đó. Bạn cần phải đặt preferenceContentSize trong ViewController của bạn cho mỗi tab với kích thước phù hợp (nếu bạn muốn kích thước tab đến kích thước nhỏ nhất thỏa mãn tất cả các ràng buộc).

override func viewWillAppear() { 
     super.viewWillAppear() 
     preferredContentSize = view.fittingSize 
} 

Nếu khó khăn của bạn đang gây ra sự cố dưới đây thử đầu tiên với một kích thước cố định, ví dụ dưới đây bộ này trong chức năng viewWillAppear mục tab của bộ điều khiển quan điểm của (Swift sử dụng ở đây, nhưng phiên bản Objective-C chỉ hoạt động cũng).

override func viewWillAppear() { 
     super.viewWillAppear() 
     preferredContentSize = NSSize(width: 400, height: 280) 
} 

Nếu thành công, fiddle với các ràng buộc của bạn để tìm ra những gì đang xảy ra

+1

Tác phẩm này, nhưng tôi không nhận được thay đổi chiều cao xem hoạt ảnh. Nó chỉ vẽ lại chính nó với kích thước mới khi tab có liên quan được chọn. Có bất kỳ mẹo nào để hỗ trợ thay đổi chiều cao hoạt ảnh không? – mixtly87

-2

Sử dụng autolayout. Đặt ràng buộc kích thước rõ ràng trên chế độ xem của bạn. Hoặc khi bạn đã nhập giao diện người dùng vào mỗi chế độ xem của mục chế độ xem tab, hãy thiết lập các ràng buộc nội bộ sao cho chúng buộc chế độ xem là kích thước bạn muốn.

+2

Việc thêm ràng buộc vào bộ điều khiển chế độ xem có chứa không thay đổi kích thước cửa sổ. –

0

Giải pháp này cho 'thanh công cụ theo phong cách' tab view điều khiển không linh hoạt và hỗ trợ hiệu quả crossfade tốt đẹp. Trong trình thiết kế bảng phân cảnh, thêm 'TabViewController' vào trường tên lớp tùy chỉnh của NSTabViewController. Đừng quên gán một tiêu đề cho mỗi viewController, điều này được sử dụng như một giá trị khóa.

import Cocoa 

class TabViewController: NSTabViewController { 

    private lazy var tabViewSizes: [String : NSSize] = [:] 

    override func viewDidLoad() { 
     // Add size of first tab to tabViewSizes 
     if let viewController = self.tabViewItems.first?.viewController, let title = viewController.title { 
      tabViewSizes[title] = viewController.view.frame.size 
     } 
     super.viewDidLoad() 
    } 

    override func transition(from fromViewController: NSViewController, to toViewController: NSViewController, options: NSViewController.TransitionOptions, completionHandler completion: (() -> Void)?) { 

     NSAnimationContext.runAnimationGroup({ context in 
      context.duration = 0.5 
      self.updateWindowFrameAnimated(viewController: toViewController) 
      super.transition(from: fromViewController, to: toViewController, options: [.crossfade, .allowUserInteraction], completionHandler: completion) 
     }, completionHandler: nil) 
    } 

    func updateWindowFrameAnimated(viewController: NSViewController) { 

     guard let title = viewController.title, let window = view.window else { 
      return 
     } 

     let contentSize: NSSize 

     if tabViewSizes.keys.contains(title) { 
      contentSize = tabViewSizes[title]! 
     } 
     else { 
      contentSize = viewController.view.frame.size 
      tabViewSizes[title] = contentSize 
     } 

     let newWindowSize = window.frameRect(forContentRect: NSRect(origin: NSPoint.zero, size: contentSize)).size 

     var frame = window.frame 
     frame.origin.y += frame.height 
     frame.origin.y -= newWindowSize.height 
     frame.size = newWindowSize 
     window.animator().setFrame(frame, display: false) 
    } 
} 
Các vấn đề liên quan