From 18bee355e0fb7139a9680441d9cdbb5616fbfeb1 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Fri, 1 Nov 2019 11:40:52 -0500 Subject: [PATCH] Fix section header separator antialiasing issues. Issue #1226 --- .../MasterFeedTableViewSectionHeader.swift | 33 ++++++++++++------- iOS/MasterFeed/MasterFeedViewController.swift | 6 ++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift b/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift index 06689374f..72fcf18be 100644 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift +++ b/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift @@ -50,11 +50,13 @@ class MasterFeedTableViewSectionHeader: UITableViewHeaderFooterView { var disclosureExpanded = false { didSet { - updateDisclosureImage() + updateExpandedState() updateUnreadCountView() } } + var isLastSection = false + private let titleView: UILabel = { let label = NonIntrinsicLabel() label.numberOfLines = 0 @@ -126,21 +128,30 @@ private extension MasterFeedTableViewSectionHeader { func commonInit() { addSubviewAtInit(unreadCountView) addSubviewAtInit(titleView) - updateDisclosureImage() + updateExpandedState() addSubviewAtInit(disclosureView) addBackgroundView() addSubviewAtInit(topSeparatorView) addSubviewAtInit(bottomSeparatorView) } - func updateDisclosureImage() { - UIView.animate(withDuration: 0.3) { - if self.disclosureExpanded { - self.disclosureView.transform = CGAffineTransform(rotationAngle: 1.570796) - } else { - self.disclosureView.transform = CGAffineTransform(rotationAngle: 0) - } + func updateExpandedState() { + if !isLastSection && self.disclosureExpanded { + self.bottomSeparatorView.isHidden = false } + UIView.animate( + withDuration: 0.3, + animations: { + if self.disclosureExpanded { + self.disclosureView.transform = CGAffineTransform(rotationAngle: 1.570796) + } else { + self.disclosureView.transform = CGAffineTransform(rotationAngle: 0) + } + }, completion: { _ in + if !self.isLastSection && !self.disclosureExpanded { + self.bottomSeparatorView.isHidden = true + } + }) } func updateUnreadCountView() { @@ -161,9 +172,9 @@ private extension MasterFeedTableViewSectionHeader { unreadCountView.setFrameIfNotEqual(layout.unreadCountRect) disclosureView.setFrameIfNotEqual(layout.disclosureButtonRect) - let top = CGRect(x: safeAreaInsets.left, y: 0, width: frame.width - safeAreaInsets.right - safeAreaInsets.left, height: 0.5) + let top = CGRect(x: safeAreaInsets.left, y: 0, width: frame.width - safeAreaInsets.right - safeAreaInsets.left, height: 0.25) topSeparatorView.setFrameIfNotEqual(top) - let bottom = CGRect(x: safeAreaInsets.left, y: frame.height - 0.5, width: frame.width - safeAreaInsets.right - safeAreaInsets.left, height: 0.5) + let bottom = CGRect(x: safeAreaInsets.left, y: frame.height - 0.25, width: frame.width - safeAreaInsets.right - safeAreaInsets.left, height: 0.25) bottomSeparatorView.setFrameIfNotEqual(bottom) } diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MasterFeed/MasterFeedViewController.swift index 41994f17e..8593c4308 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MasterFeed/MasterFeedViewController.swift @@ -174,6 +174,12 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { headerView.tag = section headerView.disclosureExpanded = sectionNode.isExpanded + + if section == tableView.numberOfSections - 1 { + headerView.isLastSection = true + } else { + headerView.isLastSection = false + } let tap = UITapGestureRecognizer(target: self, action:#selector(self.toggleSectionHeader(_:))) headerView.addGestureRecognizer(tap)