refactored enum into container
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
9c0e0cf0e8
commit
2f7315db86
@ -9,6 +9,13 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
open class TabsContainer: View {
|
open class TabsContainer: View {
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Enums
|
||||||
|
//--------------------------------------------------
|
||||||
|
public enum Width {
|
||||||
|
case percentage(CGFloat)
|
||||||
|
case value(CGFloat)
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
@ -52,10 +59,10 @@ open class TabsContainer: View {
|
|||||||
open var sticky: Bool = false { didSet { setNeedsUpdate() } }
|
open var sticky: Bool = false { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
///rules for width
|
///rules for width
|
||||||
private var _width: Tabs.Width = .percentage(0.25)
|
private var _width: Width = .percentage(0.25)
|
||||||
|
|
||||||
///Width of all Tabs when orientation is vertical, defaults to 25%.
|
///Width of all Tabs when orientation is vertical, defaults to 25%.
|
||||||
open var width: Tabs.Width {
|
open var width: Width {
|
||||||
get {
|
get {
|
||||||
return _width
|
return _width
|
||||||
}
|
}
|
||||||
@ -144,8 +151,8 @@ open class TabsContainer: View {
|
|||||||
self.tabClicked(index: index)
|
self.tabClicked(index: index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update tabs width constraints
|
||||||
contentViewWidthConstraint?.isActive = false
|
contentViewWidthConstraint?.isActive = false
|
||||||
|
|
||||||
if orientation == .vertical {
|
if orientation == .vertical {
|
||||||
switch width {
|
switch width {
|
||||||
case .percentage(let amount):
|
case .percentage(let amount):
|
||||||
@ -153,8 +160,10 @@ open class TabsContainer: View {
|
|||||||
case .value(let amount):
|
case .value(let amount):
|
||||||
contentViewWidthConstraint = tabMenu.widthAnchor.constraint(equalToConstant: amount)
|
contentViewWidthConstraint = tabMenu.widthAnchor.constraint(equalToConstant: amount)
|
||||||
}
|
}
|
||||||
contentViewWidthConstraint?.isActive = true
|
} else {
|
||||||
|
contentViewWidthConstraint = tabMenu.widthAnchor.constraint(equalTo: widthAnchor)
|
||||||
}
|
}
|
||||||
|
contentViewWidthConstraint?.isActive = true
|
||||||
|
|
||||||
tabMenu.surface = surface
|
tabMenu.surface = surface
|
||||||
tabMenu.disabled = disabled
|
tabMenu.disabled = disabled
|
||||||
@ -168,9 +177,6 @@ open class TabsContainer: View {
|
|||||||
tabMenu.selectedIndex = selectedIndex
|
tabMenu.selectedIndex = selectedIndex
|
||||||
tabMenu.size = size
|
tabMenu.size = size
|
||||||
tabMenu.sticky = sticky
|
tabMenu.sticky = sticky
|
||||||
tabMenu.tabItems.forEach {
|
|
||||||
$0.width = tabWidth(for: $0)
|
|
||||||
}
|
|
||||||
setSelected(index: selectedIndex)
|
setSelected(index: selectedIndex)
|
||||||
|
|
||||||
tabModels.forEach {
|
tabModels.forEach {
|
||||||
@ -182,19 +188,6 @@ open class TabsContainer: View {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Private Methods
|
// MARK: - Private Methods
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
private func tabWidth(for item: Tabs.TabItem) -> CGFloat? {
|
|
||||||
guard orientation == .vertical else { return item.width }
|
|
||||||
var calculated: CGFloat
|
|
||||||
switch width {
|
|
||||||
case .percentage(let percent):
|
|
||||||
calculated = (bounds.width * percent) - tabMenu.tabSpacing
|
|
||||||
case .value(let value):
|
|
||||||
calculated = value - tabMenu.tabSpacing
|
|
||||||
}
|
|
||||||
|
|
||||||
return calculated > minWidth ? calculated : minWidth
|
|
||||||
}
|
|
||||||
|
|
||||||
private func tabClicked(index: Int) {
|
private func tabClicked(index: Int) {
|
||||||
onTabChange?(index)
|
onTabChange?(index)
|
||||||
setSelected(index: index)
|
setSelected(index: index)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user