|
//
// 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]
}
}
|