У меня есть требование, где мне нужно сделать пользовательскую ячейку UiTableview. Я сделал это, и это работало просто отлично, как и ожидалось. Но теперь внутри ячейки я должен показать несколько записей (зависит от числа по предмету, в котором учится студент). так что я могу упростить свой вопрос следующим образом
Case
У меня есть список студентов, поступающих с сервера, в котором есть список зачислений против каждого студента. Поэтому я должен показать каждому студенту и его нескольким зачисленным предметам.
Мой подход
Я создал ячейку с UiTextLabel для отображения имени. И ниже этого я взял Stackview вертикально, который покажет количество предметов. Таким образом, я буду заполнять каждый студент зачисленные предметы в этом вертикальном стеке программно.
код
func createEnrollemtStackView(_ mEnrollment : EnrollmentServiceModel ) -> UIStackView {
var enrolledIn = "Not enrolled"
if(mEnrollment.GradeServiceModel != nil && mEnrollment.GradeServiceModel?.Name != nil && mEnrollment.GradeServiceModel?.Name != ""){
let gradeName = (mEnrollment.GradeServiceModel?.Name)!
let gradeSectionName = mEnrollment.GradeSectionName
let batchName = mEnrollment.BatchServiceModel?.Name
enrolledIn = "\(gradeName) - \(gradeSectionName!) (\(batchName))"
}else{
let batchName = mEnrollment.BatchServiceModel?.Name
let className = mEnrollment.ClassServiceModel?.Name
enrolledIn = "\(batchName) (\(className)) school"
}
let lblEnrolledIn = UILabel()
lblEnrolledIn.text = "Enrolled in"
lblEnrolledIn.textColor = UIColor(hex:"F48024")
lblEnrolledIn.font = lblEnrolledIn.font.withSize(10)
lblEnrolledIn.font = UIFont.boldSystemFont(ofSize: 10.0)
let lblEnrolledStatus = UILabel()
lblEnrolledStatus.text = "Enrolled Status"
lblEnrolledStatus.textColor = UIColor(hex:"F48024")
lblEnrolledStatus.font = lblEnrolledStatus.font.withSize(10)
lblEnrolledStatus.font = UIFont.boldSystemFont(ofSize: 10.0)
let tvEnrolledIn = UILabel()
tvEnrolledIn.text = enrolledIn
tvEnrolledIn.font = tvEnrolledIn.font.withSize(13)
tvEnrolledIn.backgroundColor = UIColor.green
let tvEnrolledStatus = UILabel()
tvEnrolledStatus.text = mEnrollment.EnrollmentStaus
tvEnrolledStatus.font = tvEnrolledStatus.font.withSize(13)
let stackViewHorizontal = UIStackView()
stackViewHorizontal.axis = UILayoutConstraintAxis.horizontal
stackViewHorizontal.distribution = UIStackViewDistribution.fillEqually
stackViewHorizontal.alignment = UIStackViewAlignment.leading
stackViewHorizontal.spacing = 5
let enrollmentSV = UIStackView()
enrollmentSV.axis = UILayoutConstraintAxis.vertical
enrollmentSV.distribution = UIStackViewDistribution.fillEqually
enrollmentSV.alignment = UIStackViewAlignment.leading
enrollmentSV.spacing = 3
enrollmentSV.backgroundColor = UIColor.brown
enrollmentSV.addArrangedSubview(lblEnrolledIn)
enrollmentSV.addArrangedSubview(tvEnrolledIn)
enrollmentSV.translatesAutoresizingMaskIntoConstraints = false
enrollmentSV.leadingAnchor.constraint(equalTo: stackViewHorizontal.leadingAnchor,constant:0)
enrollmentSV.trailingAnchor.constraint(equalTo: stackViewHorizontal.trailingAnchor,constant:0)
enrollmentSV.topAnchor.constraint(equalTo: stackViewHorizontal.topAnchor,constant:0)
enrollmentSV.bottomAnchor.constraint(equalTo: stackViewHorizontal.bottomAnchor,constant:0)
let statusSV = UIStackView()
statusSV.axis = UILayoutConstraintAxis.vertical
statusSV.distribution = UIStackViewDistribution.fillEqually
statusSV.alignment = UIStackViewAlignment.leading
statusSV.spacing = 3
statusSV.backgroundColor = UIColor.blue
//
//
statusSV.addArrangedSubview(lblEnrolledStatus)
statusSV.addArrangedSubview(tvEnrolledStatus)
statusSV.translatesAutoresizingMaskIntoConstraints = false
statusSV.leadingAnchor.constraint(equalTo: stackViewHorizontal.leadingAnchor,constant:0)
statusSV.trailingAnchor.constraint(equalTo: stackViewHorizontal.trailingAnchor,constant:0)
statusSV.topAnchor.constraint(equalTo: stackViewHorizontal.topAnchor,constant:0)
statusSV.bottomAnchor.constraint(equalTo: stackViewHorizontal.bottomAnchor,constant:0)
stackViewHorizontal.addArrangedSubview(enrollmentSV)
stackViewHorizontal.addArrangedSubview(statusSV)
return stackViewHorizontal
}
Я вызываю эту функцию из следующего метода
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
Эта функция дает мне еще 2 горизонтально выровненных стека, которые сами по себе вертикальны и содержат мои данные о регистрации, такие как зарегистрировано и зарегистрировано.
данные действительны. Но я сталкиваюсь с проблемами. Это как под.
- Как рассчитать высоту строки ??
- Почему мой вид стека, который программно добавляется в спроектированный вид стека, имеет отступ слева?