// // UITableView-Extensions.swift // RSCoreiOS // // Created by Maurice Parker on 9/6/19. // Copyright © 2019 Ranchero Software, LLC. All rights reserved. // import UIKit extension UITableView { /** Selects a row and scrolls it to the middle if it is not visible */ public func selectRowAndScrollIfNotVisible(at indexPath: IndexPath, animations: Animations) { guard let dataSource = dataSource, let numberOfSections = dataSource.numberOfSections, indexPath.section < numberOfSections(self), indexPath.row < dataSource.tableView(self, numberOfRowsInSection: indexPath.section) else { return } selectRow(at: indexPath, animated: animations.contains(.select), scrollPosition: .none) if let visibleIndexPaths = indexPathsForRows(in: safeAreaLayoutGuide.layoutFrame) { if !(visibleIndexPaths.contains(indexPath) && cellCompletelyVisible(indexPath)) { scrollToRow(at: indexPath, at: .middle, animated: animations.contains(.scroll)) } } } func cellCompletelyVisible(_ indexPath: IndexPath) -> Bool { let rect = rectForRow(at: indexPath) return safeAreaLayoutGuide.layoutFrame.contains(rect) } public func middleVisibleRow() -> IndexPath? { if let visibleIndexPaths = indexPathsForRows(in: safeAreaLayoutGuide.layoutFrame), visibleIndexPaths.count > 2 { return visibleIndexPaths[visibleIndexPaths.count / 2] } return nil } }