No Description

UINavigationItemExt.swift 5.4KB

    // // UINavigationItemExt.swift // ExtensionKit // // Created by FFIB on 2017/9/14. // Copyright © 2017年 FFIB. All rights reserved. // import UIKit enum BarViewPosition { case left case right } class BarView: UIView { var position = BarViewPosition.left var applied = false override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func layoutSubviews() { super.layoutSubviews() var view = superview if #available(iOS 11.0, *){ guard !applied else { return } while !(view?.isKind(of: UINavigationBar.self) ?? false), let currentView = view { if currentView.isKind(of: UIStackView.self), let superView = currentView.superview{ switch position { case .left: for constraint in superView.constraints { if constraint.firstItem?.isKind(of: UILayoutGuide.self) ?? false, constraint.firstAttribute == .trailing { superView.removeConstraint(constraint) } } NSLayoutConstraint.activate([NSLayoutConstraint(item: currentView, attribute: .leading, relatedBy: .equal, toItem: superView, attribute: .leading, multiplier: 1.0, constant: 0)]) applied = true case .right: for constraint in superView.constraints { if constraint.firstItem?.isKind(of: UILayoutGuide.self) ?? false, constraint.firstAttribute == .leading { superView.removeConstraint(constraint) } } superView.addConstraint(NSLayoutConstraint(item: currentView, attribute: .trailing, relatedBy: .equal, toItem: superView, attribute: .trailing, multiplier: 1.0, constant: 0)) applied = true } break } view = view?.superview } } } } extension UINavigationItem { public func setLeftBar(fixSpace: CGFloat = 12,item: UIBarButtonItem) { if #available(iOS 11.0, *), let customView = item.customView { let barView = BarView(frame: customView.bounds) barView.addSubview(customView) customView.center = barView.center barView.position = .left barView.x = customView.x + fixSpace self.leftBarButtonItem = UIBarButtonItem(customView: barView) return } self.leftBarButtonItems = [UIBarButtonItem(space: fixSpace - 30), item] } public func setLeftBars(fixSpace: CGFloat = 12, buttonSpace: CGFloat, images: [UIImage?], actions: [Selector], target: Any) { let customView = UIBarButtonItem(images: images, btnSpace: buttonSpace, target: target, actions: actions) setLeftBar(fixSpace: fixSpace, item: customView) } public func setRightBars(fixSpace: CGFloat = 12, buttonSpace: CGFloat, images: [UIImage?], actions: [Selector], target: Any) { let customView = UIBarButtonItem(images: images, btnSpace: buttonSpace, target: target, actions: actions) setRightBar(fixSpace: fixSpace, item: customView) } public func setRightBar(fixSpace: CGFloat = 12, item: UIBarButtonItem) { if #available(iOS 11.0, *), let customView = item.customView { let barView = BarView(frame: customView.bounds) barView.addSubview(customView) customView.center = barView.center barView.position = .right barView.x = customView.x + fixSpace self.rightBarButtonItem = UIBarButtonItem(customView: barView) return } self.rightBarButtonItems = [UIBarButtonItem(space: fixSpace - 30), item] } }