12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- //
- // UINavigationItem+Extension.swift
- // Bark
- //
- // Created by huangfeng on 2020/9/23.
- // Copyright © 2020 Fin. All rights reserved.
- //
- import UIKit
- // 如果第一个 item 是系统自带的 UIBarButtonItem ,则距离导航栏左右距离只有8
- // 自己定义的的则最少有16,太宽了
- // 所以先用 一个 fixedSpace UIBarButtonItem 先把距离给缩短点,
- // 然后用个 AlignmentRectInsetsOverridable 把自己的按钮往 左/右 挪动,减少距离
- // 用 HitTestSlopable 增加点击区域
- enum UINavigationItemPosition {
- case left
- case right
- }
- extension UINavigationItem {
- func setLeftBarButtonItem(item: UIBarButtonItem) {
- setBarButtonItems(items: [item], position: .left)
- }
- func setRightBarButtonItem(item: UIBarButtonItem) {
- setBarButtonItems(items: [item], position: .right)
- }
- func setBarButtonItems(items: [UIBarButtonItem], position: UINavigationItemPosition) {
- guard items.count > 0 else {
- self.leftBarButtonItems = nil
- return
- }
- var buttonItems = items
- if #available(iOS 11.0, *) {
- buttonItems.forEach { item in
- guard let view = item.customView else { return }
- item.customView?.translatesAutoresizingMaskIntoConstraints = false
- (item.customView as? HitTestSlopable)?.hitTestSlop = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
- (item.customView as? AlignmentRectInsetsOverridable)?.alignmentRectInsetsOverride = UIEdgeInsets(top: 0, left: position == .left ? 8 : -8, bottom: 0, right: position == .left ? -8 : 8)
- item.customView?.snp.makeConstraints { make in
- make.width.equalTo(view.bounds.size.width > 24 ? view.bounds.width : 24)
- make.height.equalTo(view.bounds.size.height > 24 ? view.bounds.height : 24)
- }
- }
- buttonItems.insert(UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil), at: 0)
- }
- else {
- let spacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
- spacer.width = -8
- buttonItems.insert(spacer, at: 0)
- }
- if position == .left {
- self.leftBarButtonItems = buttonItems
- }
- else {
- self.rightBarButtonItems = buttonItems
- }
- }
- }
|