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)
}
}
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