Reuse layout calcs when possible on timeline

This commit is contained in:
Maurice Parker 2019-04-29 17:45:12 -05:00
parent f357f27ae1
commit a5a5eb1df0

View File

@ -17,6 +17,8 @@ class MasterTimelineTableViewCell: UITableViewCell {
private let dateView = MasterTimelineTableViewCell.singleLineUILabel() private let dateView = MasterTimelineTableViewCell.singleLineUILabel()
private let feedNameView = MasterTimelineTableViewCell.singleLineUILabel() private let feedNameView = MasterTimelineTableViewCell.singleLineUILabel()
private var layout: MasterTimelineCellLayout?
private lazy var avatarImageView: UIImageView = { private lazy var avatarImageView: UIImageView = {
let imageView = NonIntrinsicImageView(image: AppAssets.feedImage) let imageView = NonIntrinsicImageView(image: AppAssets.feedImage)
imageView.contentMode = .scaleAspectFit imageView.contentMode = .scaleAspectFit
@ -45,25 +47,29 @@ class MasterTimelineTableViewCell: UITableViewCell {
} }
override func sizeThatFits(_ size: CGSize) -> CGSize { override func sizeThatFits(_ size: CGSize) -> CGSize {
let layout = updatedLayout() if layout == nil {
return CGSize(width: bounds.width, height: layout.height) layout = updatedLayout()
}
return CGSize(width: bounds.width, height: layout!.height)
} }
override func layoutSubviews() { override func layoutSubviews() {
super.layoutSubviews() super.layoutSubviews()
let layout = updatedLayout() if layout == nil {
layout = updatedLayout()
}
unreadIndicatorView.setFrameIfNotEqual(layout.unreadIndicatorRect) unreadIndicatorView.setFrameIfNotEqual(layout!.unreadIndicatorRect)
starView.setFrameIfNotEqual(layout.starRect) starView.setFrameIfNotEqual(layout!.starRect)
avatarImageView.setFrameIfNotEqual(layout.avatarImageRect) avatarImageView.setFrameIfNotEqual(layout!.avatarImageRect)
setFrame(for: titleView, rect: layout.titleRect) setFrame(for: titleView, rect: layout!.titleRect)
setFrame(for: summaryView, rect: layout.summaryRect) setFrame(for: summaryView, rect: layout!.summaryRect)
feedNameView.setFrameIfNotEqual(layout.feedNameRect) feedNameView.setFrameIfNotEqual(layout!.feedNameRect)
dateView.setFrameIfNotEqual(layout.dateRect) dateView.setFrameIfNotEqual(layout!.dateRect)
separatorInset = layout.separatorInsets separatorInset = layout!.separatorInsets
} }
@ -228,6 +234,7 @@ private extension MasterTimelineTableViewCell {
} }
func updateSubviews() { func updateSubviews() {
layout = nil
updateTitleView() updateTitleView()
updateSummaryView() updateSummaryView()
updateDateView() updateDateView()