From 0747df430a475dc2d28c309586a99dc04016df71 Mon Sep 17 00:00:00 2001 From: Marian Paul Date: Wed, 19 Oct 2022 18:48:07 +0200 Subject: [PATCH] Fix a crash when using with SPM and added more ui customisation values --- Package.swift | 3 ++- .../SwiftyMenuAttributes+ArrowStyle.swift | 4 ++++ .../SwiftyMenuAttributes+HeaderStyle.swift | 16 ++++++++++++---- .../SwiftyMenuAttributes+TextStyle.swift | 10 +++++----- SwiftyMenu/Classes/SwiftyMenu.swift | 9 ++++----- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Package.swift b/Package.swift index 7634524..14da329 100644 --- a/Package.swift +++ b/Package.swift @@ -23,7 +23,8 @@ let package = Package( .target( name: "SwiftyMenu", dependencies: ["SnapKit"], - path: "SwiftyMenu" + path: "SwiftyMenu", + resources: [.process("Assets")] ), ], swiftLanguageVersions: [.v5] diff --git a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+ArrowStyle.swift b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+ArrowStyle.swift index ed77105..b9071e6 100644 --- a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+ArrowStyle.swift +++ b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+ArrowStyle.swift @@ -35,7 +35,11 @@ public extension SwiftyMenuAttributes { case value(isEnabled: Bool, image: UIImage? = nil) var arrowStyleValues: (isEnabled: Bool, image: UIImage?) { +#if SWIFT_PACKAGE + let frameworkBundle = Bundle.module +#else let frameworkBundle = Bundle(for: SwiftyMenu.self) +#endif let defaultImage = UIImage(named: "downArrow", in: frameworkBundle, compatibleWith: nil)! switch self { diff --git a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+HeaderStyle.swift b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+HeaderStyle.swift index f7b7957..521eacb 100644 --- a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+HeaderStyle.swift +++ b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+HeaderStyle.swift @@ -31,12 +31,20 @@ public extension SwiftyMenuAttributes { enum HeaderStyle { /** Row with background color */ - case value(backgroundColor: UIColor, height: Int) + case value(backgroundColor: UIColor, contentHorizontalAlignment: UIControl.ContentHorizontalAlignment = Self.defaultContentHorizontalAlignment, height: Int) - var headerStyleValues: (backgroundColor: UIColor, height: Int) { + var headerStyleValues: (backgroundColor: UIColor, contentHorizontalAlignment: UIControl.ContentHorizontalAlignment, height: Int) { switch self { - case let .value(backgroundColor, height): - return (backgroundColor: backgroundColor, height: height) + case let .value(backgroundColor, contentHorizontalAlignment, height): + return (backgroundColor: backgroundColor, contentHorizontalAlignment: contentHorizontalAlignment, height: height) + } + } + + public static var defaultContentHorizontalAlignment: UIControl.ContentHorizontalAlignment { + if #available(iOS 11.0, *) { + return .leading + } else { + return .left } } } diff --git a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+TextStyle.swift b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+TextStyle.swift index 9dbe96f..c38d20c 100644 --- a/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+TextStyle.swift +++ b/SwiftyMenu/Classes/MenuAttributes/SwiftyMenuAttributes+TextStyle.swift @@ -32,14 +32,14 @@ public extension SwiftyMenuAttributes { case `default` - case value(color: UIColor, separator: String, font: UIFont?) + case value(color: UIColor, selectedColor: UIColor? = nil, separator: String, font: UIFont?, alignment: NSTextAlignment = .left) - var textStyleValues: (color: UIColor, separator: String, font: UIFont?) { + var textStyleValues: (color: UIColor, selectedColor: UIColor?, separator: String, font: UIFont?, alignment: NSTextAlignment) { switch self { - case let .value(color, separator, font): - return (color: color, separator: separator, font: font) + case let .value(color, selectedColor, separator, font, alignment): + return (color: color, selectedColor ?? color, separator: separator, font: font, alignment: alignment) case .default: - return (color: .black, separator: ", ", font: .systemFont(ofSize: 12)) + return (color: .black, nil, separator: ", ", font: .systemFont(ofSize: 12), alignment: .left) } } } diff --git a/SwiftyMenu/Classes/SwiftyMenu.swift b/SwiftyMenu/Classes/SwiftyMenu.swift index 621b03b..22afca6 100644 --- a/SwiftyMenu/Classes/SwiftyMenu.swift +++ b/SwiftyMenu/Classes/SwiftyMenu.swift @@ -154,12 +154,14 @@ extension SwiftyMenu: UITableViewDataSource { cell.textLabel?.text = items[indexPath.row].displayableValue cell.textLabel?.textColor = attributes.textStyle.textStyleValues.color cell.textLabel?.font = attributes.textStyle.textStyleValues.font + cell.textLabel?.textAlignment = attributes.textStyle.textStyleValues.alignment cell.tintColor = attributes.textStyle.textStyleValues.color cell.backgroundColor = attributes.rowStyle.rowStyleValues.backgroundColor cell.selectionStyle = .none if attributes.multiSelect.isEnabled { if selectedIndecis[indexPath.row] != nil { + cell.textLabel?.textColor = attributes.textStyle.textStyleValues.selectedColor cell.accessoryType = attributes.accessory.isEnabled ? .checkmark : .none cell.backgroundColor = attributes.rowStyle.rowStyleValues.selectedColor } else { @@ -167,6 +169,7 @@ extension SwiftyMenu: UITableViewDataSource { } } else { if indexPath.row == selectedIndex { + cell.textLabel?.textColor = attributes.textStyle.textStyleValues.selectedColor cell.accessoryType = attributes.accessory.isEnabled ? .checkmark : .none cell.backgroundColor = attributes.rowStyle.rowStyleValues.selectedColor } else { @@ -304,11 +307,7 @@ extension SwiftyMenu { selectButton.setImage(arrow, for: .normal) } - if #available(iOS 11.0, *) { - selectButton.contentHorizontalAlignment = .leading - } else { - selectButton.contentHorizontalAlignment = .left - } + selectButton.contentHorizontalAlignment = attributes.headerStyle.headerStyleValues.contentHorizontalAlignment selectButton.addTarget(self, action: #selector(handleMenuState), for: .touchUpInside) }