From 395f254f556be5d5e8542d327915dc42f6063ca1 Mon Sep 17 00:00:00 2001 From: CMK Date: Wed, 19 May 2021 17:40:09 +0800 Subject: [PATCH] fix: bottom corner for last pick sever cell missing issue --- Mastodon/Diffiable/Item/PickServerItem.swift | 5 ++-- .../Diffiable/Section/PickServerSection.swift | 30 ++++++++++++------- .../MastodonPickServerViewModel.swift | 6 ++-- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Mastodon/Diffiable/Item/PickServerItem.swift b/Mastodon/Diffiable/Item/PickServerItem.swift index 1ae38ba1c..7db2c958f 100644 --- a/Mastodon/Diffiable/Item/PickServerItem.swift +++ b/Mastodon/Diffiable/Item/PickServerItem.swift @@ -6,6 +6,7 @@ // import Foundation +import Combine import MastodonSDK /// Note: update Equatable when change case @@ -19,11 +20,11 @@ enum PickServerItem { extension PickServerItem { final class ServerItemAttribute: Equatable, Hashable { - var isLast: Bool + var isLast: CurrentValueSubject var isExpand: Bool init(isLast: Bool, isExpand: Bool) { - self.isLast = isLast + self.isLast = CurrentValueSubject(isLast) self.isExpand = isExpand } diff --git a/Mastodon/Diffiable/Section/PickServerSection.swift b/Mastodon/Diffiable/Section/PickServerSection.swift index aaafb8ce7..182c93924 100644 --- a/Mastodon/Diffiable/Section/PickServerSection.swift +++ b/Mastodon/Diffiable/Section/PickServerSection.swift @@ -83,16 +83,24 @@ extension PickServerSection { cell.updateExpandMode(mode: attribute.isExpand ? .expand : .collapse) - if attribute.isLast { - cell.containerView.layer.maskedCorners = [ - .layerMinXMaxYCorner, - .layerMaxXMaxYCorner - ] - cell.containerView.layer.cornerCurve = .continuous - cell.containerView.layer.cornerRadius = MastodonPickServerAppearance.tableViewCornerRadius - } else { - cell.containerView.layer.cornerRadius = 0 - } + attribute.isLast + .receive(on: DispatchQueue.main) + .sink { [weak cell] isLast in + guard let cell = cell else { return } + if isLast { + cell.containerView.layer.maskedCorners = [ + .layerMinXMaxYCorner, + .layerMaxXMaxYCorner + ] + cell.containerView.layer.cornerCurve = .continuous + cell.containerView.layer.cornerRadius = MastodonPickServerAppearance.tableViewCornerRadius + cell.containerView.layer.masksToBounds = true + } else { + cell.containerView.layer.cornerRadius = 0 + cell.containerView.layer.masksToBounds = false + } + } + .store(in: &cell.disposeBag) cell.expandMode .receive(on: DispatchQueue.main) @@ -152,8 +160,10 @@ extension PickServerSection { ] cell.containerView.layer.cornerCurve = .continuous cell.containerView.layer.cornerRadius = MastodonPickServerAppearance.tableViewCornerRadius + cell.containerView.layer.masksToBounds = true } else { cell.containerView.layer.cornerRadius = 0 + cell.containerView.layer.masksToBounds = false } attribute.isNoResult ? cell.stopAnimating() : cell.startAnimating() diff --git a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift index 0edc0a350..a576632a4 100644 --- a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift +++ b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift @@ -109,7 +109,7 @@ extension MastodonPickServerViewModel { var serverItems: [PickServerItem] = [] for server in indexedServers { let attribute = oldSnapshotServerItemAttributeDict[server.domain] ?? PickServerItem.ServerItemAttribute(isLast: false, isExpand: false) - attribute.isLast = false + attribute.isLast.value = false let item = PickServerItem.server(server: server, attribute: attribute) guard !serverItems.contains(item) else { continue } serverItems.append(item) @@ -119,7 +119,7 @@ extension MastodonPickServerViewModel { if !unindexedServers.isEmpty { for server in unindexedServers { let attribute = oldSnapshotServerItemAttributeDict[server.domain] ?? PickServerItem.ServerItemAttribute(isLast: false, isExpand: false) - attribute.isLast = false + attribute.isLast.value = false let item = PickServerItem.server(server: server, attribute: attribute) guard !serverItems.contains(item) else { continue } serverItems.append(item) @@ -134,7 +134,7 @@ extension MastodonPickServerViewModel { } if case let .server(_, attribute) = serverItems.last { - attribute.isLast = true + attribute.isLast.value = true } if case let .loader(attribute) = serverItems.last { attribute.isLast = true