diff --git a/Sources/Classes/SwipeMenuView.swift b/Sources/Classes/SwipeMenuView.swift index bfa4b19..b5d782c 100644 --- a/Sources/Classes/SwipeMenuView.swift +++ b/Sources/Classes/SwipeMenuView.swift @@ -61,6 +61,9 @@ public struct SwipeMenuViewOptions { /// AdditionView paddings. Defaults to `.zero`. public var padding: UIEdgeInsets = .zero + /// AdditionView ratio is AdditionView / TabView. Defaults to `0.5`. + public var widthRatio: Double = 0.5 + /// AdditionView backgroundColor. Defaults to `.black`. public var backgroundColor: UIColor = .black @@ -100,6 +103,9 @@ public struct SwipeMenuViewOptions { /// Convert the text color of ItemView to selected text color by scroll rate of ContentScrollView. Defaults to `true`. public var needsConvertTextColorRatio: Bool = true + + /// TabView adjust width ratio or not. Defaults to `true`. + public var needsAdjustItemViewRaitoWidth: Bool = true /// TabView enable safeAreaLayout. Defaults to `true`. public var isSafeAreaEnabled: Bool = true @@ -147,7 +153,7 @@ public struct SwipeMenuViewOptions { // MARK: - SwipeMenuViewDelegate -public protocol SwipeMenuViewDelegate: class { +public protocol SwipeMenuViewDelegate: AnyObject { /// Called before setup self. func swipeMenuView(_ swipeMenuView: SwipeMenuView, viewWillSetupAt currentIndex: Int) @@ -171,7 +177,7 @@ extension SwipeMenuViewDelegate { // MARK: - SwipeMenuViewDataSource -public protocol SwipeMenuViewDataSource: class { +public protocol SwipeMenuViewDataSource: AnyObject { /// Return the number of pages in `SwipeMenuView`. func numberOfPages(in swipeMenuView: SwipeMenuView) -> Int diff --git a/Sources/Classes/TabView.swift b/Sources/Classes/TabView.swift index 8b20a6e..84a62b2 100644 --- a/Sources/Classes/TabView.swift +++ b/Sources/Classes/TabView.swift @@ -2,7 +2,7 @@ import UIKit // MARK: - TabViewDelegate -public protocol TabViewDelegate: class { +public protocol TabViewDelegate: AnyObject { /// Called before selecting the tab. func tabView(_ tabView: TabView, willSelectTabAt index: Int) @@ -19,7 +19,7 @@ extension TabViewDelegate { // MARK: - TabViewDataSource -public protocol TabViewDataSource: class { +public protocol TabViewDataSource: AnyObject { /// Return the number of Items in `TabView`. func numberOfItems(in tabView: TabView) -> Int @@ -351,6 +351,11 @@ extension TabView { switch options.addition { case .underline: let itemView = itemViews[currentIndex] + if options.needsAdjustItemViewRaitoWidth { + let padding = itemView.frame.width * (1 - options.additionView.widthRatio) / 2 + options.additionView.padding.left = padding + options.additionView.padding.right = padding + } additionView = UIView(frame: CGRect(x: itemView.frame.origin.x + options.additionView.padding.left, y: itemView.frame.height - options.additionView.padding.vertical, width: itemView.frame.width - options.additionView.padding.horizontal, height: options.additionView.underline.height)) additionView.backgroundColor = options.additionView.backgroundColor containerView.addSubview(additionView) @@ -402,10 +407,14 @@ extension TabView { private func updateAdditionViewPosition(index: Int) { guard let target = currentItem else { return } - additionView.frame.origin.x = target.frame.origin.x + options.additionView.padding.left - if options.needsAdjustItemViewWidth { let cellWidth = itemViews[index].frame.width + if options.needsAdjustItemViewRaitoWidth { + let padding = cellWidth * (1 - options.additionView.widthRatio) / 2 + options.additionView.padding.left = padding + options.additionView.padding.right = padding + } + additionView.frame.origin.x = target.frame.origin.x + options.additionView.padding.left additionView.frame.size.width = cellWidth - options.additionView.padding.horizontal }