Skip to content

Commit 9d0424b

Browse files
author
Mark Pospesel
authored
[Issue 19] Use SystemImage enum for default close button image (#25)
1 parent 89b91d6 commit 9d0424b

File tree

6 files changed

+58
-7
lines changed

6 files changed

+58
-7
lines changed

Sources/YBottomSheet/Enums/BottomSheetController+Enums.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
// Copyright © 2023 Y Media Labs. All rights reserved.
77
//
88

9-
import Foundation
109
import UIKit
1110

1211
internal extension BottomSheetController {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// BottomSheetController+Images.swift
3+
// YBottomSheet
4+
//
5+
// Created by Mark Pospesel on 4/26/23.
6+
// Copyright © 2023 Y Media Labs. All rights reserved.
7+
//
8+
9+
import UIKit
10+
import YCoreUI
11+
12+
extension BottomSheetController {
13+
/// Images
14+
enum Images: String, SystemImage, CaseIterable {
15+
/// xmark
16+
case xmark
17+
18+
static var renderingMode: UIImage.RenderingMode { .alwaysTemplate }
19+
}
20+
}

Sources/YBottomSheet/SheetHeaderView/SheetHeaderView+Appearance.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,20 @@ extension SheetHeaderView {
2020
/// Header view layout properties such as spacing between views. Default is `.default`.
2121
public let layout: Layout
2222

23-
/// Default appearance.
23+
/// Default appearance
2424
public static let `default` = Appearance()
25-
25+
26+
/// Default close button image (SF symbol `xmark`)
27+
public static let defaultCloseButtonImage: UIImage = BottomSheetController.Images.xmark.image
28+
2629
/// Initializes a sheet header appearance.
2730
/// - Parameters:
2831
/// - title: tuple consisting of `textColor` and `typography` for the title label.
2932
/// - closeButtonImage: close button image or pass `nil` to hide the button.
3033
/// - layout: sheet header view layout properties such as spacing between views.
3134
public init(
3235
title: (textColor: UIColor, typography: Typography) = (.label, .systemLabel.fontWeight(.semibold)),
33-
closeButtonImage: UIImage? = UIImage(systemName: "xmark"),
36+
closeButtonImage: UIImage? = defaultCloseButtonImage,
3437
layout: Layout = .default
3538
) {
3639
self.title = title

Sources/YBottomSheet/SheetHeaderView/SheetHeaderView.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,14 @@ open class SheetHeaderView: UIView {
2626
public let titleLabel = TypographyLabel(typography: .systemLabel.fontWeight(.semibold))
2727

2828
/// Close button to dismiss the bottom sheet.
29-
public let closeButton = UIButton()
30-
29+
public let closeButton: UIButton = {
30+
let button = UIButton()
31+
button.adjustsImageSizeForAccessibilityContentSizeCategory = true
32+
button.imageView?.contentMode = .scaleAspectFit
33+
button.imageView?.constrainAspectRatio(1)
34+
return button
35+
}()
36+
3137
private let buttonSize = CGSize(width: 44, height: 44)
3238
private weak var closeButtonLeadingConstraint: NSLayoutConstraint?
3339
private weak var closeButtonTrailingConstraint: NSLayoutConstraint?
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//
2+
// BottomSheetController+ImagesTests.swift
3+
// YBottomSheet
4+
//
5+
// Created by Mark Pospesel on 4/26/23.
6+
// Copyright © 2023 Y Media Labs. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import YBottomSheet
11+
12+
final class BottomSheetControllerImagesTests: XCTestCase {
13+
func test_loadImages() {
14+
BottomSheetController.Images.allCases.forEach {
15+
XCTAssertNotNil($0.loadImage())
16+
}
17+
}
18+
}

Tests/YBottomSheetTests/SheetHeaderView/SheetHeaderViewAppearanceTests.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@ final class SheetHeaderViewAppearanceTests: XCTestCase {
1515
let sut = SheetHeaderView.Appearance.default
1616
let expected = SheetHeaderView.Appearance(
1717
title: (.label, .systemLabel.fontWeight(.semibold)),
18-
closeButtonImage: UIImage(systemName: "xmark"),
18+
closeButtonImage: SheetHeaderView.Appearance.defaultCloseButtonImage,
1919
layout: .default
2020
)
2121

2222
XCTAssertHeaderAppearanceEqual(sut, expected)
2323
}
24+
25+
func test_defaultCloseButtonImage() {
26+
let sut = SheetHeaderView.Appearance.defaultCloseButtonImage
27+
XCTAssertEqual(sut, BottomSheetController.Images.xmark.image)
28+
}
2429
}
2530

2631
extension XCTestCase {

0 commit comments

Comments
 (0)