【发布时间】:2021-06-23 18:35:00
【问题描述】:
对此非常陌生,因此我很感谢这里的任何和所有帮助。
我花了很多时间浏览网络并尝试不同的解决方案,但我不知所措。
我正在使用 tableView 在视图中填充事件。这些事件可以有多个参与者 (2 - 8) 参与者(和其他对象)由子堆栈视图表示,我根据参与者数组的计数控制是否显示 stackView7、stackView8 等。
由于某种原因,有时,一个或几个参与者 stackView 被压缩成更小的尺寸。
很抱歉,附加了这么多代码,但我真的不确定什么是相关的。
提前谢谢你,如果上下文需要不同的代码,请告诉我
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "challengeCell", for: indexPath)
let participant1Photo = cell.viewWithTag(10) as! UIImageView
let participant1Name = cell.viewWithTag(11) as! UILabel
let participant2Photo = cell.viewWithTag(20) as! UIImageView
let participant2Name = cell.viewWithTag(21) as! UILabel
let participant3Stack = cell.viewWithTag(3)
let participant3Photo = cell.viewWithTag(30) as! UIImageView
let participant3Name = cell.viewWithTag(31) as! UILabel
let participant4Stack = cell.viewWithTag(4)
let participant4Photo = cell.viewWithTag(40) as! UIImageView
let participant4Name = cell.viewWithTag(41) as! UILabel
let participant5Stack = cell.viewWithTag(5)
let participant5Photo = cell.viewWithTag(50) as! UIImageView
let participant5Name = cell.viewWithTag(51) as! UILabel
let participant6Stack = cell.viewWithTag(6)
let participant6Photo = cell.viewWithTag(60) as! UIImageView
let participant6Name = cell.viewWithTag(61) as! UILabel
let participant7Stack = cell.viewWithTag(7)
let participant7Photo = cell.viewWithTag(70) as! UIImageView
let participant7Name = cell.viewWithTag(71) as! UILabel
let participant8Stack = cell.viewWithTag(8)
let participant8Photo = cell.viewWithTag(80) as! UIImageView
let participant8Name = cell.viewWithTag(81) as! UILabel
//set up stacks
participant3Stack?.isHidden = true
participant4Stack?.isHidden = true
participant5Stack?.isHidden = true
participant6Stack?.isHidden = true
participant7Stack?.isHidden = true
participant8Stack?.isHidden = true
//MARK: participant1
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![0]) == true {
participant1Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant1Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![0]) == true {
participant1Accepted.image = UIImage(systemName: "person.fill.xmark")
participant1Accepted.tintColor = UIColor.systemRed
}
if currUserID == challenges[indexPath.row].participants![0] {
participant1Name.text = "You"
} else {
participant1Name.text = challenges[indexPath.row].senderUserName
}
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].senderUserID! + challenges[indexPath.row].activity!)) { (userActivity) in
participant1Average.text = String((userActivity?.averageScore)!)
participant1Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant1Win.text = "0%"
} else {
participant1Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant2
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![1]) == true {
participant2Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant2Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![1]) == true {
participant2Accepted.image = UIImage(systemName: "person.fill.xmark")
participant2Accepted.tintColor = UIColor.systemRed
}
if currUserID == challenges[indexPath.row].participants![1] {
participant2Name.text = "You"
} else {
participant2Name.text = challenges[indexPath.row].receiverUserName
}
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].receiverUserID! + challenges[indexPath.row].activity!)) { (userActivity) in
participant2Average.text = String((userActivity?.averageScore)!)
participant2Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant2Win.text = "0%"
} else {
participant2Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant3
if challenges[indexPath.row].participants!.count > 2 {
if currUserID == challenges[indexPath.row].participants![2] {
participant3Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![2]) { (userNameData) in
participant3Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![2]) == true {
participant3Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant3Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![2]) == true {
participant3Accepted.image = UIImage(systemName: "person.fill.xmark")
participant3Accepted.tintColor = UIColor.systemRed
}
participant3Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![2] + challenges[indexPath.row].activity!)) { (userActivity) in
participant3Average.text = String((userActivity?.averageScore)!)
participant3Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant3Win.text = "0%"
} else {
participant3Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant4
if challenges[indexPath.row].participants!.count > 3 {
if currUserID == challenges[indexPath.row].participants![3] {
participant4Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![3]) { (userNameData) in
participant4Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![3]) == true {
participant4Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant4Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![3]) == true {
participant4Accepted.image = UIImage(systemName: "person.fill.xmark")
participant4Accepted.tintColor = UIColor.systemRed
}
participant4Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![3] + challenges[indexPath.row].activity!)) { (userActivity) in
participant4Average.text = String((userActivity?.averageScore)!)
participant4Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant4Win.text = "0%"
} else {
participant4Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant5
if challenges[indexPath.row].participants!.count > 4 {
if currUserID == challenges[indexPath.row].participants![4] {
participant5Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![4]) { (userNameData) in
participant5Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![4]) == true {
participant5Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant5Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![4]) == true {
participant5Accepted.image = UIImage(systemName: "person.fill.xmark")
participant5Accepted.tintColor = UIColor.systemRed
}
participant5Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![4] + challenges[indexPath.row].activity!)) { (userActivity) in
participant5Average.text = String((userActivity?.averageScore)!)
participant5Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant5Win.text = "0%"
} else {
participant5Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant6
if challenges[indexPath.row].participants!.count > 5 {
if currUserID == challenges[indexPath.row].participants![5] {
participant6Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![5]) { (userNameData) in
participant6Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![5]) == true {
participant6Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant6Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![5]) == true {
participant6Accepted.image = UIImage(systemName: "person.fill.xmark")
participant6Accepted.tintColor = UIColor.systemRed
}
participant6Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![5] + challenges[indexPath.row].activity!)) { (userActivity) in
participant6Average.text = String((userActivity?.averageScore)!)
participant6Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant6Win.text = "0%"
} else {
participant6Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant7
if challenges[indexPath.row].participants!.count > 6 {
if currUserID == challenges[indexPath.row].participants![6] {
participant7Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![6]) { (userNameData) in
participant7Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![6]) == true {
participant7Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant7Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![6]) == true {
participant7Accepted.image = UIImage(systemName: "person.fill.xmark")
participant7Accepted.tintColor = UIColor.systemRed
}
participant7Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![6] + challenges[indexPath.row].activity!)) { (userActivity) in
participant7Average.text = String((userActivity?.averageScore)!)
participant7Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant7Win.text = "0%"
} else {
participant7Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
//MARK: participant8
if challenges[indexPath.row].participants!.count > 7 {
if currUserID == challenges[indexPath.row].participants![7] {
participant8Name.text = "You"
} else {
UserService.getUserName(userID: challenges[indexPath.row].participants![7]) { (userNameData) in
participant8Name.text = userNameData
}
}
if challenges[indexPath.row].confirmed?.contains(challenges[indexPath.row].participants![7]) == true {
participant8Accepted.image = UIImage(systemName: "person.fill.checkmark")
participant8Accepted.tintColor = UIColor.systemGreen
} else if challenges[indexPath.row].denied?.contains(challenges[indexPath.row].participants![7]) == true {
participant8Accepted.image = UIImage(systemName: "person.fill.xmark")
participant8Accepted.tintColor = UIColor.systemRed
}
participant8Stack?.isHidden = false
UserActivityService.getUserActivity(userActivityID: String(challenges[indexPath.row].participants![7] + challenges[indexPath.row].activity!)) { (userActivity) in
participant8Average.text = String((userActivity?.averageScore)!)
participant8Best.text = String((userActivity?.bestScore)!)
if (userActivity?.played)! < 1 {
participant8Win.text = "0%"
} else {
participant8Win.text = String("\((((userActivity?.wins)! / (userActivity?.played)!) * 1000).rounded() / 10)%")
}
}
}
return cell
}
【问题讨论】:
-
欢迎来到 Stack Overflow。不幸的是,您向我们展示了我们不需要需要知道的一切,以及我们要做需要知道的一切。几个建议:首先,开始更简单 - 一个堆栈视图并确保其约束设置正确......然后添加一个堆栈视图来显示/隐藏并确保它有效。其次,给你的 UI 元素一些对比鲜明的背景颜色,这样你就可以看到正在发生的事情。第三,如果您无法使用简单的布局,请返回并展示您在单元格类中约束元素的方式。
标签: ios swift uitableview uikit uistackview