Commit 06342c5d authored by David黄金龙's avatar David黄金龙

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

* 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS:
  // 消息
  案例分享逻辑修改
  在港记录页面完善
parents cd7c6972 da381d2f
This diff is collapsed.
//
// YHBaseCornerRadiusBorderView.swift
// galaxy
//
// Created by alexzzw on 2024/9/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHBaseCornerRadiusBorderView: UIView {
private var radius: CGFloat = 2
private var corner: UIRectCorner = .allCorners
var lineWidth: CGFloat? {
didSet {
if lineWidth != oldValue {
boarderLayers?.forEach {
$0.removeFromSuperlayer()
}
boarderLayers = nil
boarderLayers = createRoundedCornersAndBorder(corners: corner, radii: CGSize(width: radius, height: radius), lineWidth: lineWidth, lineColor: lineColor)
}
}
}
var lineColor: CGColor? {
didSet {
if lineColor != oldValue {
boarderLayers?.forEach {
$0.removeFromSuperlayer()
}
boarderLayers = nil
boarderLayers = createRoundedCornersAndBorder(corners: corner, radii: CGSize(width: radius, height: radius), lineWidth: lineWidth, lineColor: lineColor)
}
}
}
public init(cornerRadius: CGFloat, corner: UIRectCorner, lineWidth: CGFloat?, lineColor: CGColor?) {
self.corner = corner
self.radius = cornerRadius
self.lineWidth = lineWidth
self.lineColor = lineColor
super.init(frame: CGRect.zero)
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private var boarderLayers: [CAShapeLayer]?
private var viewBounds = CGRect.zero {
didSet {
guard viewBounds != oldValue else {
return
}
boarderLayers?.forEach {
$0.removeFromSuperlayer()
}
boarderLayers = nil
boarderLayers = createRoundedCornersAndBorder(corners: corner, radii: CGSize(width: radius, height: radius), lineWidth: lineWidth, lineColor: lineColor)
}
}
override public func layoutSubviews() {
super.layoutSubviews()
viewBounds = bounds
}
}
...@@ -34,6 +34,9 @@ class YHBaseDynamicCornerRadiusView: UIView { ...@@ -34,6 +34,9 @@ class YHBaseDynamicCornerRadiusView: UIView {
private var viewBounds = CGRect.zero { private var viewBounds = CGRect.zero {
didSet { didSet {
guard viewBounds != oldValue else {
return
}
boarderLayer?.removeFromSuperlayer() boarderLayer?.removeFromSuperlayer()
boarderLayer = nil boarderLayer = nil
if let corner = corner { if let corner = corner {
......
...@@ -229,11 +229,6 @@ extension YHServiceCenterViewController { ...@@ -229,11 +229,6 @@ extension YHServiceCenterViewController {
} }
@objc func pushOrderView() { @objc func pushOrderView() {
// let vc = YHResignGuidelinesExampleViewController()
// self.navigationController?.pushViewController(vc)
// return
var flag = true var flag = true
if self.state == 1 || self.state == 3 { if self.state == 1 || self.state == 3 {
......
...@@ -10,25 +10,31 @@ import UIKit ...@@ -10,25 +10,31 @@ import UIKit
import JXSegmentedView import JXSegmentedView
class YHHKRecordsContentVC: YHBaseViewController { class YHHKRecordsContentVC: YHBaseViewController {
private lazy var tableView: UITableView = {
let view = UITableView(frame:.zero, style:.grouped)
view.estimatedSectionHeaderHeight = 16.0
view.estimatedSectionFooterHeight = 0.01
view.sectionHeaderHeight = 16.0
view.sectionFooterHeight = 0.01
view.contentInsetAdjustmentBehavior = .never
view.showsVerticalScrollIndicator = false
view.separatorStyle = .none
view.delegate = self
view.dataSource = self
view.backgroundColor = .clear
view.rowHeight = 52
view.tableFooterView = UITableViewHeaderFooterView()
view.register(YHResignDocumentHeaderCell.self, forCellReuseIdentifier: YHResignDocumentHeaderCell.cellReuseIdentifier)
view.register(YHResignDocumentContentCell.self, forCellReuseIdentifier: YHResignDocumentContentCell.cellReuseIdentifier)
return view
}()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
// Do any additional setup after loading the view.
} }
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
} }
extension YHHKRecordsContentVC { extension YHHKRecordsContentVC {
...@@ -36,6 +42,13 @@ extension YHHKRecordsContentVC { ...@@ -36,6 +42,13 @@ extension YHHKRecordsContentVC {
gk_navBarAlpha = 0 gk_navBarAlpha = 0
gk_navigationBar.isHidden = true gk_navigationBar.isHidden = true
view.backgroundColor = UIColor.contentBkgColor view.backgroundColor = UIColor.contentBkgColor
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.top.bottom.equalToSuperview()
}
tableView.tableFooterView = UIView(frame: CGRect.init(x: 0, y: 0, width: KScreenWidth, height: kMargin))
} }
} }
...@@ -44,3 +57,29 @@ extension YHHKRecordsContentVC: JXSegmentedListContainerViewListDelegate { ...@@ -44,3 +57,29 @@ extension YHHKRecordsContentVC: JXSegmentedListContainerViewListDelegate {
return view return view
} }
} }
extension YHHKRecordsContentVC: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
}
//
// YHHKRecordsCustomerItemCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/19.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsCustomerItemCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsCustomerItemCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.textColor = .mainTextColor50
label.font = .PFSC_R(ofSize: 14)
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?, detail: String?) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
}
}
extension YHHKRecordsCustomerItemCell {
private func setupUI() {
updateCellCorner(.top)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(bottomLineView)
infoTitleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(1)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-12)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(6)
make.centerY.equalTo(infoTitleLabel)
make.right.equalToSuperview().offset(-18)
}
}
}
...@@ -14,7 +14,7 @@ class YHHKRecordsDurationItemCell: YHHKRecordsSectionItemBaseCell { ...@@ -14,7 +14,7 @@ class YHHKRecordsDurationItemCell: YHHKRecordsSectionItemBaseCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_R(ofSize:14) label.font = .PFSC_R(ofSize: 14)
label.textColor = .mainTextColor70 label.textColor = .mainTextColor70
return label return label
}() }()
......
//
// YHHKRecordsEditButtonCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/19.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsEditButtonCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsEditButtonCell"
private lazy var centerLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 14)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var topLineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?) {
centerLabel.text = title
}
}
extension YHHKRecordsEditButtonCell {
private func setupUI() {
updateCellCorner(.bottom)
subContainerView.addSubview(centerLabel)
subContainerView.addSubview(topLineView)
topLineView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(1)
}
centerLabel.snp.makeConstraints { make in
make.center.equalToSuperview()
}
}
}
...@@ -13,7 +13,7 @@ class YHHKRecordsHeaderCell: UITableViewCell { ...@@ -13,7 +13,7 @@ class YHHKRecordsHeaderCell: UITableViewCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:17) label.font = .PFSC_M(ofSize: 17)
label.textColor = .mainTextColor label.textColor = .mainTextColor
return label return label
}() }()
...@@ -55,7 +55,7 @@ extension YHHKRecordsHeaderCell { ...@@ -55,7 +55,7 @@ extension YHHKRecordsHeaderCell {
make.left.equalToSuperview().offset(18) make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18) make.right.lessThanOrEqualToSuperview().offset(-18)
make.top.equalToSuperview().offset(16) make.top.equalToSuperview().offset(16)
make.bottom.equalTo(bottomLineView.snp.top).offset(-12) make.bottom.equalToSuperview().offset(-12)
} }
} }
} }
//
// YHHKRecordsInfoItemCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/19.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsInfoItemCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsInfoItemCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = .mainTextColor50
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.textColor = .mainTextColor
label.font = .PFSC_R(ofSize: 14)
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?, detail: String?, topMargin: CGFloat = 18, bottomMargin: CGFloat = 18) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
infoTitleLabel.snp.remakeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(topMargin)
make.bottom.equalToSuperview().offset(-bottomMargin)
}
}
}
extension YHHKRecordsInfoItemCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
infoTitleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(9)
make.bottom.equalToSuperview().offset(-9)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(6)
make.centerY.equalTo(infoTitleLabel)
make.right.equalToSuperview().offset(-18)
}
}
}
...@@ -14,7 +14,7 @@ class YHHKRecordsLastStayCell: YHHKRecordsSectionItemBaseCell { ...@@ -14,7 +14,7 @@ class YHHKRecordsLastStayCell: YHHKRecordsSectionItemBaseCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_R(ofSize:14) label.font = .PFSC_R(ofSize: 14)
label.textColor = .mainTextColor50 label.textColor = .mainTextColor50
return label return label
}() }()
......
//
// YHHKRecordsPersonnelSelectCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsPersonnelSelectCell: UICollectionViewCell {
static let cellReuseIdentifier = "YHHKRecordsPersonnelSelectCell"
static let cellHeight: CGFloat = 32
static let offsetX: CGFloat = 10
static let labelFont = UIFont.PFSC_R(ofSize: 13)
let defaultBgColor: UIColor = .contentBkgColor
let defaultFontColor: UIColor = .mainTextColor
let selectedBgColor: UIColor = .brandMainColor8
let selectedFontColor: UIColor = .brandMainColor
let selectedBorderColor: UIColor = .brandMainColor
private lazy var backCover: YHBaseCornerRadiusBorderView = {
let view = YHBaseCornerRadiusBorderView(cornerRadius: 3, corner: .allCorners, lineWidth: nil, lineColor: selectedBorderColor.cgColor)
view.backgroundColor = defaultBgColor
return view
}()
private lazy var tagLabel: UILabel = {
let label = UILabel(frame: CGRect.zero)
label.textColor = defaultFontColor
label.font = YHHKRecordsPersonnelSelectCell.labelFont
label.textAlignment = .center
label.lineBreakMode = .byTruncatingTail
return label
}()
private lazy var selctedBadgeIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "personnel_selected_badge")
view.isHidden = true
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
configViews()
}
override var isSelected: Bool {
didSet {
if isSelected {
backCover.backgroundColor = selectedBgColor
tagLabel.textColor = selectedFontColor
backCover.lineWidth = 1
selctedBadgeIcon.isHidden = false
} else {
backCover.backgroundColor = defaultBgColor
tagLabel.textColor = defaultFontColor
backCover.lineWidth = nil
selctedBadgeIcon.isHidden = true
}
}
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func configViews() {
contentView.addSubview(backCover)
backCover.addSubview(tagLabel)
backCover.addSubview(selctedBadgeIcon)
backCover.snp.makeConstraints { maker in
maker.edges.equalToSuperview()
}
tagLabel.snp.makeConstraints { maker in
maker.top.bottom.equalToSuperview()
maker.left.equalToSuperview().offset(YHHKRecordsPersonnelSelectCell.offsetX).priority(.high)
maker.right.equalToSuperview().offset(-YHHKRecordsPersonnelSelectCell.offsetX).priority(.high)
}
selctedBadgeIcon.snp.makeConstraints { make in
make.bottom.right.equalToSuperview()
make.width.height.equalTo(14)
}
}
func setupCellInfo(_ text: String?) {
tagLabel.text = text
}
}
//
// YHHKRecordsRemarkCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/19.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsRemarkCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsRemarkCell"
var textViewDidChanged: ((UITextView) -> Void)?
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = .mainTextColor50
return label
}()
private lazy var remarkTextView: UITextView = {
let view = UITextView()
view.font = .PFSC_R(ofSize: 14)
view.textColor = .mainTextColor
view.tintColor = .mainTextColor
view.backgroundColor = .contentBkgColor
view.font = UIFont.systemFont(ofSize: 14)
view.returnKeyType = .default
view.enablesReturnKeyAutomatically = true
view.delegate = self
view.addObserver(self, forKeyPath: "attributedText", options: .new, context: nil)
view.textContainerInset = UIEdgeInsets.zero
view.textContainer.lineFragmentPadding = 0
return view
}()
private lazy var editTipsLabel: UILabel = {
let label = UILabel()
label.isHidden = true
label.text = "请输入备注内容"
label.font = UIFont.systemFont(ofSize: 14)
label.textColor = .mainTextColor30
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String? = "备注:", titleColor: UIColor = .mainTextColor50, detail: String?, isEditable: Bool = false, cellType: YHResignRoundCellType = .mid) {
updateCellCorner(cellType)
infoTitleLabel.text = title
remarkTextView.isEditable = isEditable
remarkTextView.text = detail
editTipsLabel.isHidden = !isEditable || (detail?.count ?? 0) > 0
}
}
extension YHHKRecordsRemarkCell {
private func setupUI() {
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(remarkTextView)
subContainerView.addSubview(editTipsLabel)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
}
remarkTextView.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel)
make.right.equalToSuperview().offset(18)
make.height.equalTo(88)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(8)
make.bottom.equalToSuperview().offset(-16)
}
editTipsLabel.snp.makeConstraints { make in
make.left.equalTo(remarkTextView.snp.left).offset(12)
make.top.equalTo(remarkTextView.snp.top).offset(10)
}
}
}
extension YHHKRecordsRemarkCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
editTipsLabel.isHidden = textView.text.count > 0
textViewDidChanged?(textView)
}
}
...@@ -14,7 +14,7 @@ class YHHKRecordsSectionHeaderCell: YHHKRecordsSectionItemBaseCell { ...@@ -14,7 +14,7 @@ class YHHKRecordsSectionHeaderCell: YHHKRecordsSectionItemBaseCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:14) label.font = .PFSC_M(ofSize: 14)
label.textColor = .mainTextColor label.textColor = .mainTextColor
return label return label
}() }()
......
//
// YHHKRecordsStayingPersonnelCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsStayingPersonnelCell: YHResignDocumentCell {
private static let offsetX: CGFloat = 18
private static let offsetTop: CGFloat = 8
private static let offsetBottom: CGFloat = 24
private static let minimumLineSpacing: CGFloat = 12
private static let minimumInteritemSpacing: CGFloat = 8
var selectItemAction: ((String?) -> Void)?
var collectionData: [String] = [] {
didSet {
infoCollectionView.reloadData()
}
}
private var minWidth: CGFloat {
return (KScreenWidth - YHHKRecordsStayingPersonnelCell.offsetX * 2 - YHHKRecordsStayingPersonnelCell.minimumLineSpacing * 3) / 4.0
}
private var maxWidth: CGFloat {
return (KScreenWidth - YHHKRecordsStayingPersonnelCell.offsetX * 2)
}
static let cellReuseIdentifier = "YHHKRecordsStayingPersonnelCell"
private lazy var asteriskIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "asterisk_icon_6")
return view
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
private lazy var layout: AlignedCollectionViewFlowLayout = {
return AlignedCollectionViewFlowLayout(horizontalAlignment: .left)
}()
private lazy var infoCollectionView: UICollectionView = {
layout.minimumLineSpacing = YHHKRecordsStayingPersonnelCell.minimumLineSpacing
layout.minimumInteritemSpacing = YHHKRecordsStayingPersonnelCell.minimumInteritemSpacing
layout.scrollDirection = .vertical
layout.sectionInset = UIEdgeInsets(top: YHHKRecordsStayingPersonnelCell.offsetTop, left: YHHKRecordsStayingPersonnelCell.offsetX, bottom: YHHKRecordsStayingPersonnelCell.offsetBottom, right: YHHKRecordsStayingPersonnelCell.offsetX)
let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
collectionView.backgroundColor = .white
collectionView.delegate = self
collectionView.dataSource = self
collectionView.showsHorizontalScrollIndicator = false
collectionView.register(YHHKRecordsPersonnelSelectCell.self, forCellWithReuseIdentifier: YHHKRecordsPersonnelSelectCell.cellReuseIdentifier)
return collectionView
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?) {
infoTitleLabel.text = title
}
}
extension YHHKRecordsStayingPersonnelCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(asteriskIcon)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(bottomLineView)
asteriskIcon.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.centerY.equalTo(infoTitleLabel)
make.width.height.equalTo(6)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalTo(asteriskIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
}
bottomLineView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(1)
}
infoCollectionView.snp.makeConstraints { make in
make.top.equalTo(infoTitleLabel.snp.bottom)
make.left.right.equalToSuperview()
make.bottom.equalTo(bottomLineView.snp.top)
}
}
}
extension YHHKRecordsStayingPersonnelCell: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return collectionData.count > 0 ? 1 : 0
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return collectionData.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionData.count > indexPath.item, let cell = collectionView.dequeueReusableCell(withReuseIdentifier: YHHKRecordsPersonnelSelectCell.cellReuseIdentifier, for: indexPath) as? YHHKRecordsPersonnelSelectCell {
let data = collectionData[indexPath.item]
cell.setupCellInfo(data)
return cell
}
return UICollectionViewCell()
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if collectionData.count > indexPath.item {
let data = collectionData[indexPath.item]
let attrString = NSAttributedString(string: data, attributes: [.font: YHHKRecordsPersonnelSelectCell.labelFont])
var width = attrString.yh_width(containerHeight: YHHKRecordsPersonnelSelectCell.cellHeight) + 2 * YHHKRecordsPersonnelSelectCell.offsetX
if width < minWidth {
width = minWidth
}
if width > maxWidth {
width = maxWidth
}
return CGSize(width: width, height: YHHKRecordsPersonnelSelectCell.cellHeight)
}
return CGSize.zero
}
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
if collectionData.count > indexPath.item, let cell = collectionView.cellForItem(at: indexPath) as? YHHKRecordsPersonnelSelectCell {
if cell.isSelected {
collectionView.deselectItem(at: indexPath, animated: true)
selectItemAction?(nil)
return false
}
return true
}
return true
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if collectionData.count > indexPath.item, let cell = collectionView.cellForItem(at: indexPath) as? YHHKRecordsPersonnelSelectCell {
let data = collectionData[indexPath.item]
selectItemAction?(cell.isSelected ? data : nil)
}
}
}
...@@ -14,7 +14,7 @@ class YHHKRecordsSummaryItemCell: YHHKRecordsSectionItemBaseCell { ...@@ -14,7 +14,7 @@ class YHHKRecordsSummaryItemCell: YHHKRecordsSectionItemBaseCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_R(ofSize:14) label.font = .PFSC_R(ofSize: 14)
label.textColor = .mainTextColor label.textColor = .mainTextColor
return label return label
}() }()
......
//
// YHHKRecordsTimeSelectCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsTimeSelectCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsTimeSelectCell"
private lazy var asteriskIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "asterisk_icon_6")
return view
}()
private lazy var arrowIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "right_arrow_black_20")
return view
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.textColor = .mainTextColor
label.font = .PFSC_M(ofSize: 14)
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?, detail: String?) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
}
}
extension YHHKRecordsTimeSelectCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(asteriskIcon)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(arrowIcon)
subContainerView.addSubview(bottomLineView)
infoTitleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
asteriskIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
arrowIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
asteriskIcon.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.centerY.equalToSuperview()
make.width.height.equalTo(6)
}
arrowIcon.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-18)
make.width.height.equalTo(20)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalTo(asteriskIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
}
infoDetailLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.centerX.equalToSuperview().priority(.high)
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(4).priority(.required)
}
bottomLineView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(1)
}
}
}
//
// YHHKRecordsTitleCell.swift
// galaxy
//
// Created by alexzzw on 2024/9/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKRecordsTitleCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHHKRecordsHeaderCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = .mainTextColor
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(_ title: String?) {
infoTitleLabel.text = title
}
}
extension YHHKRecordsTitleCell {
private func setupUI() {
updateCellCorner(.top)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(bottomLineView)
bottomLineView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(1)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-12)
}
}
}
...@@ -13,7 +13,7 @@ class YHResignDocumentContentCell: YHResignDocumentCell { ...@@ -13,7 +13,7 @@ class YHResignDocumentContentCell: YHResignDocumentCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:14) label.font = .PFSC_M(ofSize: 14)
label.textColor = .mainTextColor label.textColor = .mainTextColor
return label return label
}() }()
...@@ -21,7 +21,7 @@ class YHResignDocumentContentCell: YHResignDocumentCell { ...@@ -21,7 +21,7 @@ class YHResignDocumentContentCell: YHResignDocumentCell {
private lazy var infoDetailLabel: UILabel = { private lazy var infoDetailLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .mainTextColor50 label.textColor = .mainTextColor50
label.font = .PFSC_R(ofSize:14) label.font = .PFSC_R(ofSize: 14)
return label return label
}() }()
......
...@@ -13,7 +13,7 @@ class YHResignDocumentHeaderCell: YHResignDocumentCell { ...@@ -13,7 +13,7 @@ class YHResignDocumentHeaderCell: YHResignDocumentCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:17) label.font = .PFSC_M(ofSize: 17)
label.textColor = .mainTextColor label.textColor = .mainTextColor
return label return label
}() }()
...@@ -21,7 +21,7 @@ class YHResignDocumentHeaderCell: YHResignDocumentCell { ...@@ -21,7 +21,7 @@ class YHResignDocumentHeaderCell: YHResignDocumentCell {
private lazy var infoDetailLabel: UILabel = { private lazy var infoDetailLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .mainTextColor50 label.textColor = .mainTextColor50
label.font = .PFSC_R(ofSize:13) label.font = .PFSC_R(ofSize: 13)
return label return label
}() }()
......
...@@ -26,7 +26,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -26,7 +26,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:17) label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222") label.textColor = UIColor(hexString: "#222222")
label.text = "文书稿件" label.text = "文书稿件"
return label return label
...@@ -34,7 +34,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -34,7 +34,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
private lazy var infoStatusLabel: YHPaddedLabel = { private lazy var infoStatusLabel: YHPaddedLabel = {
let label = YHPaddedLabel(padding: UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 4)) let label = YHPaddedLabel(padding: UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 4))
label.font = .PFSC_M(ofSize:10) label.font = .PFSC_M(ofSize: 10)
label.layer.cornerRadius = 2 label.layer.cornerRadius = 2
label.layer.masksToBounds = true label.layer.masksToBounds = true
return label return label
...@@ -59,7 +59,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -59,7 +59,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
private lazy var fileNameLabel: UILabel = { private lazy var fileNameLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = UIColor(hexString: "#222222") label.textColor = UIColor(hexString: "#222222")
label.font = .PFSC_M(ofSize:14) label.font = .PFSC_M(ofSize: 14)
label.numberOfLines = 0 label.numberOfLines = 0
return label return label
}() }()
...@@ -79,7 +79,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -79,7 +79,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.isHidden = true button.isHidden = true
button.setTitleColor(UIColor.brandMainColor, for: .normal) button.setTitleColor(UIColor.brandMainColor, for: .normal)
button.titleLabel?.font = .PFSC_R(ofSize:14) button.titleLabel?.font = .PFSC_R(ofSize: 14)
button.addTarget(self, action: #selector(leftButtonDidClick(_:)), for: .touchUpInside) button.addTarget(self, action: #selector(leftButtonDidClick(_:)), for: .touchUpInside)
return button return button
}() }()
...@@ -88,7 +88,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -88,7 +88,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.isHidden = true button.isHidden = true
button.setTitleColor(UIColor.brandMainColor, for: .normal) button.setTitleColor(UIColor.brandMainColor, for: .normal)
button.titleLabel?.font = .PFSC_R(ofSize:14) button.titleLabel?.font = .PFSC_R(ofSize: 14)
button.addTarget(self, action: #selector(midButtonDidClick(_:)), for: .touchUpInside) button.addTarget(self, action: #selector(midButtonDidClick(_:)), for: .touchUpInside)
return button return button
}() }()
...@@ -97,7 +97,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell { ...@@ -97,7 +97,7 @@ class YHResignDocumentStatusCell: YHResignDocumentCell {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.isHidden = true button.isHidden = true
button.setTitleColor(UIColor.brandMainColor, for: .normal) button.setTitleColor(UIColor.brandMainColor, for: .normal)
button.titleLabel?.font = .PFSC_R(ofSize:14) button.titleLabel?.font = .PFSC_R(ofSize: 14)
button.addTarget(self, action: #selector(rightButtonDidClick(_:)), for: .touchUpInside) button.addTarget(self, action: #selector(rightButtonDidClick(_:)), for: .touchUpInside)
return button return button
}() }()
......
...@@ -26,7 +26,7 @@ class YHResignDocumentTipsCell: YHResignDocumentCell { ...@@ -26,7 +26,7 @@ class YHResignDocumentTipsCell: YHResignDocumentCell {
private lazy var infoTitleLabel: UILabel = { private lazy var infoTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .PFSC_M(ofSize:13) label.font = .PFSC_M(ofSize: 13)
label.textColor = .brandMainColor label.textColor = .brandMainColor
label.text = "填写指引" label.text = "填写指引"
return label return label
...@@ -35,7 +35,7 @@ class YHResignDocumentTipsCell: YHResignDocumentCell { ...@@ -35,7 +35,7 @@ class YHResignDocumentTipsCell: YHResignDocumentCell {
private lazy var infoDetailLabel: UILabel = { private lazy var infoDetailLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .mainTextColor50 label.textColor = .mainTextColor50
label.font = .PFSC_R(ofSize:12) label.font = .PFSC_R(ofSize: 12)
label.numberOfLines = 0 label.numberOfLines = 0
return label return label
}() }()
......
...@@ -94,7 +94,6 @@ extension YHResignGuidelinesExampleShareViewController { ...@@ -94,7 +94,6 @@ extension YHResignGuidelinesExampleShareViewController {
centerImageView = { centerImageView = {
let view = UIImageView() let view = UIImageView()
view.image = UIImage(named: centerImageName)
return view return view
}() }()
view.addSubview(centerImageView) view.addSubview(centerImageView)
...@@ -126,6 +125,7 @@ extension YHResignGuidelinesExampleShareViewController { ...@@ -126,6 +125,7 @@ extension YHResignGuidelinesExampleShareViewController {
make.center.equalToSuperview() make.center.equalToSuperview()
make.width.height.equalTo(21) make.width.height.equalTo(21)
} }
centerImageView.kf.setImage(with: URL(string: centerImageName))
let qrString = url let qrString = url
if let qrCode = qrString.generateQRCode() { if let qrCode = qrString.generateQRCode() {
// 可以将qrCode设置为UIImageView的image属性来显示二维码 // 可以将qrCode设置为UIImageView的image属性来显示二维码
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
// //
import UIKit import UIKit
import Kingfisher
enum YHResignGuidelinesExampleType: Int { enum YHResignGuidelinesExampleType: Int {
case house case house
...@@ -23,6 +24,9 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController { ...@@ -23,6 +24,9 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController {
var type: YHResignGuidelinesExampleType = .house var type: YHResignGuidelinesExampleType = .house
// var viewModel = YHResignCertificateListViewModel() // var viewModel = YHResignCertificateListViewModel()
var viewModel = YHResignGuidelinesViewModel() var viewModel = YHResignGuidelinesViewModel()
var height: CGFloat = 0
var id = 3473
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
gk_navTitle = "银河续签案例分享" gk_navTitle = "银河续签案例分享"
...@@ -37,21 +41,21 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController { ...@@ -37,21 +41,21 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController {
} }
func getData() { func getData() {
if type == .house { // if type == .house {
imageName = "resign_guidelines_example_house" // imageName = "resign_guidelines_example_house"
} else if type == .work { // } else if type == .work {
imageName = "resign_guidelines_example_work" // imageName = "resign_guidelines_example_work"
} else if type == .taxation { // } else if type == .taxation {
imageName = "resign_guidelines_example_taxation" // imageName = "resign_guidelines_example_taxation"
} else { // } else {
imageName = "resign_guidelines_example_nowork" // imageName = "resign_guidelines_example_nowork"
} // }
viewModel.getResignDetail(Id: 3473) {[weak self] success, error in viewModel.getResignDetail(Id: id) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.imageName = self.viewModel.mainModel.content_url
self.getImageSizeFromURL(urlString: self.imageName)
} }
tableView.reloadData()
} }
func setView() { func setView() {
...@@ -104,21 +108,41 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController { ...@@ -104,21 +108,41 @@ class YHResignGuidelinesExampleViewController: YHBaseViewController {
} }
@objc func nextStep() { @objc func nextStep() {
var imageName = "" // var imageName = ""
if type == .house { // if type == .house {
imageName = "resign_guidelines_example_house_share" // imageName = "resign_guidelines_example_house_share"
} else if type == .work { // } else if type == .work {
imageName = "resign_guidelines_example_work_share" // imageName = "resign_guidelines_example_work_share"
} else if type == .taxation { // } else if type == .taxation {
imageName = "resign_guidelines_example_taxation_share" // imageName = "resign_guidelines_example_taxation_share"
} else { // } else {
imageName = "resign_guidelines_example_nowork_share" // imageName = "resign_guidelines_example_nowork_share"
} // }
let vc = YHResignGuidelinesExampleShareViewController() let vc = YHResignGuidelinesExampleShareViewController()
vc.centerImageName = imageName vc.centerImageName = self.viewModel.mainModel.share_url
vc.url = "https://baidu.com" vc.url = "https://baidu.com"
self.navigationController?.pushViewController(vc) self.navigationController?.pushViewController(vc)
} }
func getImageSizeFromURL(urlString: String) {
let imageURL = URL(string: urlString)!
// 使用Kingfisher的ImageDownloader下载图片数据
ImageDownloader.default.downloadImage(with: imageURL, options: [], progressBlock: nil) { (result) in
switch result {
case .success(let response):
// 使用UIImage初始化图片数据
let image = response.image
let size = image.size
let scale = size.width > 0 ? Double(size.height / size.width) : 0.0
// 获取图片的宽度和高度
self.height = KScreenWidth * scale
self.tableView.reloadData()
case .failure(let error):
print(error)
}
}
}
} }
extension YHResignGuidelinesExampleViewController: UITableViewDelegate, UITableViewDataSource { extension YHResignGuidelinesExampleViewController: UITableViewDelegate, UITableViewDataSource {
...@@ -133,15 +157,17 @@ extension YHResignGuidelinesExampleViewController: UITableViewDelegate, UITableV ...@@ -133,15 +157,17 @@ extension YHResignGuidelinesExampleViewController: UITableViewDelegate, UITableV
} }
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if type == .house { // if type == .house {
return 986.fix // return 986.fix
} else if type == .work { // } else if type == .work {
return 925.fix // return 925.fix
} else if type == .taxation { // } else if type == .taxation {
return 946.fix // return 946.fix
} else { // } else {
return 1069.fix // return 1069.fix
} // }
return height
} }
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
...@@ -154,7 +180,7 @@ class YHResignGuidelinesExampleTableViewCell: UITableViewCell { ...@@ -154,7 +180,7 @@ class YHResignGuidelinesExampleTableViewCell: UITableViewCell {
var bgImageView: UIImageView! var bgImageView: UIImageView!
var imageName: String? { var imageName: String? {
didSet { didSet {
bgImageView.image = UIImage(named: imageName ?? "") bgImageView.kf.setImage(with: URL(string: imageName))
} }
} }
override func awakeFromNib() { override func awakeFromNib() {
......
...@@ -21,6 +21,8 @@ class YHResignGuidelinesModel: SmartCodable { ...@@ -21,6 +21,8 @@ class YHResignGuidelinesModel: SmartCodable {
var is_finished_transcode: Int = 0 var is_finished_transcode: Int = 0
var img_url_compress: String = "" var img_url_compress: String = ""
var clue_classify_img_url: String = "" var clue_classify_img_url: String = ""
var share_url: String = ""
var content_url: String = ""
required init() { required init() {
} }
......
...@@ -18,10 +18,11 @@ class YHResignGuidelinesViewModel: YHBaseViewModel { ...@@ -18,10 +18,11 @@ class YHResignGuidelinesViewModel: YHBaseViewModel {
//1. json字符串 转 对象 //1. json字符串 转 对象
guard self != nil else { return } guard self != nil else { return }
if json.code == 200 { if json.code == 200 {
guard let dic = json.data?.peel as? [String : Any], let data = dic["data"] as? [String: Any], let result = YHResignGuidelinesModel.deserialize(from: data) else { guard let dic = json.data?.peel as? [String : Any], let result = YHResignGuidelinesModel.deserialize(from: dic) else {
callBackBlock(false,nil) callBackBlock(false,nil)
return return
} }
self?.mainModel = result self?.mainModel = result
callBackBlock(true, nil) callBackBlock(true, nil)
} else { } else {
......
...@@ -100,3 +100,19 @@ extension NSMutableAttributedString { ...@@ -100,3 +100,19 @@ extension NSMutableAttributedString {
} }
} }
extension NSAttributedString {
func yh_height(containerWidth: CGFloat) -> CGFloat {
let rect = boundingRect(with: CGSize(width: containerWidth, height: CGFloat.greatestFiniteMagnitude),
options: [.usesLineFragmentOrigin, .usesFontLeading],
context: nil)
return ceil(rect.size.height)
}
func yh_width(containerHeight: CGFloat) -> CGFloat {
let rect = boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: containerHeight),
options: [.usesLineFragmentOrigin, .usesFontLeading],
context: nil)
return ceil(rect.size.width)
}
}
...@@ -89,5 +89,25 @@ extension UIView { ...@@ -89,5 +89,25 @@ extension UIView {
self.layer.mask = layer self.layer.mask = layer
return layer return layer
} }
@discardableResult
public func createRoundedCornersAndBorder(corners: UIRectCorner, radii: CGSize, lineWidth: CGFloat?, lineColor: CGColor?) -> [CAShapeLayer] {
var shapeLayers: [CAShapeLayer] = []
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: radii)
let shape = CAShapeLayer()
shape.path = path.cgPath
layer.mask = shape
shapeLayers.append(shape)
if let lineWidth = lineWidth, let lineColor = lineColor {
let bordLayer = CAShapeLayer()
bordLayer.lineWidth = lineWidth
bordLayer.strokeColor = lineColor
bordLayer.fillColor = UIColor.clear.cgColor
bordLayer.path = path.cgPath
layer.insertSublayer(bordLayer, at: 0)
shapeLayers.append(bordLayer)
}
return shapeLayers
}
} }
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "asterisk_icon_6@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "asterisk_icon_6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "personnel_selected_badge@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "personnel_selected_badge@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "right_arrow_black_20@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "right_arrow_black_20@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment