mirror of
https://github.com/zhigang1992/GitHawk.git
synced 2026-05-01 05:21:44 +08:00
74 lines
2.1 KiB
Swift
74 lines
2.1 KiB
Swift
//
|
|
// IssueCommentCodeBlockCell.swift
|
|
// Freetime
|
|
//
|
|
// Created by Ryan Nystrom on 5/22/17.
|
|
// Copyright © 2017 Ryan Nystrom. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import IGListKit
|
|
|
|
final class IssueCommentCodeBlockCell: IssueCommentBaseCell, ListBindable {
|
|
|
|
static let scrollViewInset = UIEdgeInsets(
|
|
top: Styles.Sizes.rowSpacing,
|
|
left: 0,
|
|
bottom: Styles.Sizes.rowSpacing,
|
|
right: 0
|
|
)
|
|
static let textViewInset = UIEdgeInsets(
|
|
top: Styles.Sizes.rowSpacing,
|
|
left: Styles.Sizes.commentGutter,
|
|
bottom: Styles.Sizes.rowSpacing,
|
|
right: Styles.Sizes.commentGutter
|
|
)
|
|
|
|
let textView = AttributedStringView()
|
|
let scrollView = UIScrollView()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
// make didSelectItem work for the cell
|
|
// https://stackoverflow.com/a/24853578/940936
|
|
scrollView.isUserInteractionEnabled = false
|
|
contentView.addGestureRecognizer(scrollView.panGestureRecognizer)
|
|
|
|
scrollView.backgroundColor = Styles.Colors.Gray.lighter.color
|
|
contentView.addSubview(scrollView)
|
|
|
|
scrollView.addSubview(textView)
|
|
}
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
|
|
// size the scrollview to the width of the cell but match its height to its content size
|
|
// that way when the cell is collapsed, the scroll view isn't vertically scrollable
|
|
let inset = IssueCommentCodeBlockCell.scrollViewInset
|
|
scrollView.frame = CGRect(
|
|
x: inset.left,
|
|
y: inset.top,
|
|
width: contentView.bounds.width - inset.left - inset.right,
|
|
height: scrollView.contentSize.height
|
|
)
|
|
}
|
|
|
|
// MARK: ListBindable
|
|
|
|
func bindViewModel(_ viewModel: Any) {
|
|
guard let viewModel = viewModel as? IssueCommentCodeBlockModel else { return }
|
|
|
|
let contentSize = viewModel.contentSize
|
|
scrollView.contentSize = contentSize
|
|
|
|
textView.configureAndSizeToFit(text: viewModel.code, width: 0)
|
|
}
|
|
|
|
}
|