LNRoomApplySeatCell.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // LNRoomApplySeatCell.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/18.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNRoomApplySeatCell: UITableViewCell {
  11. private let indexLabel = UILabel()
  12. private let avatarView = UIImageView()
  13. private let nameLabel = UILabel()
  14. private let genderView = UIImageView()
  15. private let timeLabel = UILabel()
  16. private let separator = UIView()
  17. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  18. super.init(style: style, reuseIdentifier: reuseIdentifier)
  19. setupViews()
  20. }
  21. func update(item: LNRoomMicApplyPageVO, index: Int) {
  22. indexLabel.text = "\(index)"
  23. avatarView.showAvatar(item.user.avatar)
  24. nameLabel.text = item.user.nickname
  25. timeLabel.text = item.relativeTimeText
  26. genderView.image = switch item.user.gender {
  27. case .unknow: nil
  28. case .male: .icGenderMale
  29. case .female: .icGenderFemale
  30. }
  31. genderView.isHidden = item.user.gender == .unknow
  32. }
  33. required init?(coder: NSCoder) {
  34. fatalError("init(coder:) has not been implemented")
  35. }
  36. }
  37. private extension LNRoomApplySeatCell {
  38. func setupViews() {
  39. backgroundColor = .clear
  40. contentView.backgroundColor = .clear
  41. selectionStyle = .none
  42. indexLabel.font = .heading_h3
  43. indexLabel.textColor = UIColor.text_2.withAlphaComponent(0.7)
  44. indexLabel.textAlignment = .center
  45. contentView.addSubview(indexLabel)
  46. indexLabel.snp.makeConstraints { make in
  47. make.leading.equalToSuperview().offset(16)
  48. make.centerY.equalToSuperview()
  49. make.width.equalTo(18)
  50. }
  51. avatarView.layer.cornerRadius = 16
  52. avatarView.layer.borderWidth = 0.5
  53. avatarView.layer.borderColor = UIColor.fill.cgColor
  54. avatarView.clipsToBounds = true
  55. avatarView.contentMode = .scaleAspectFill
  56. contentView.addSubview(avatarView)
  57. avatarView.snp.makeConstraints { make in
  58. make.leading.equalTo(indexLabel.snp.trailing).offset(12)
  59. make.verticalEdges.equalToSuperview().inset(14)
  60. make.width.height.equalTo(32)
  61. }
  62. timeLabel.font = .body_s
  63. timeLabel.textColor = .text_2
  64. timeLabel.textAlignment = .right
  65. contentView.addSubview(timeLabel)
  66. timeLabel.snp.makeConstraints { make in
  67. make.trailing.equalToSuperview().offset(-16)
  68. make.centerY.equalToSuperview()
  69. }
  70. let nameRow = UIView()
  71. contentView.addSubview(nameRow)
  72. nameRow.snp.makeConstraints { make in
  73. make.leading.equalTo(avatarView.snp.trailing).offset(12)
  74. make.trailing.lessThanOrEqualTo(timeLabel.snp.leading).offset(-12)
  75. make.centerY.equalToSuperview()
  76. }
  77. nameLabel.font = .heading_h4
  78. nameLabel.textColor = .text_1
  79. nameRow.addSubview(nameLabel)
  80. nameLabel.snp.makeConstraints { make in
  81. make.leading.top.bottom.equalToSuperview()
  82. }
  83. genderView.contentMode = .scaleAspectFit
  84. nameRow.addSubview(genderView)
  85. genderView.snp.makeConstraints { make in
  86. make.leading.equalTo(nameLabel.snp.trailing).offset(2)
  87. make.centerY.equalTo(nameLabel)
  88. make.trailing.lessThanOrEqualToSuperview()
  89. make.width.height.equalTo(14)
  90. }
  91. separator.backgroundColor = .fill.withAlphaComponent(0.08)
  92. contentView.addSubview(separator)
  93. separator.snp.makeConstraints { make in
  94. make.horizontalEdges.equalToSuperview().inset(16)
  95. make.bottom.equalToSuperview()
  96. make.height.equalTo(0.5)
  97. }
  98. }
  99. }