如何修复某些设备上的UITableViewCell缩小?

时间:2019-07-17 15:01:13

标签: swift xcode uitableview

我正在开发一个显示通知的应用程序,允许用户发布评论和编辑通知,并查看通知的评论。

为此,我有3个原型单元,分别称为“活动”,“控制”和“注释”单元。我的前两个Active和Control外观和在所有设备上自动调整大小的效果都很好。但是,注释单元在Plus大小的iOS设备(不包括iPad)上缩小到无法读取的大小。

注释单元在堆栈视图中仅具有3个大小和颜色略有不同的标签。这是在Swift 4上。

发生这种情况的设备列表: 6 +,6s +,7 +,8 +,X,Xs,Xs Max

https://imgur.com/a/QHPTlSW

上面显示的单元格在iPhone XR上是预期的,在Xs Max上是意外的

我尝试编辑压缩和拥抱规则,尝试使用约束来强制高度(从技术上讲这是可行的,但是它破坏了外观并引发了警告)。

     func numberOfSections(in tableView: UITableView) -> Int {
        if activeEvents.count == 0 {
            self.tableView.isHidden = true
            self.activityIndicator.isHidden = false
            self.activityLabel.isHidden = false
            self.activityIndicator.startAnimating()
        } else {
            self.tableView.isHidden = false
            self.activityIndicator.isHidden = true
            self.activityLabel.isHidden = true
            self.activityIndicator.stopAnimating()
        }
        return activeEvents.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if activeEvents[section].expanded {
            return activeEvents[section].comments.count + 2
        } else {
            return 1
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.row == 0 {
            let activeEvent = activeEvents[indexPath.section]
            let cell = tableView.dequeueReusableCell(withIdentifier: "activeCell") as! ActiveCell
            cell.selectionStyle = .none
            cell.setCell(active: activeEvent)
            return cell
        } else if indexPath.row == 1 {
            let activeEvent = activeEvents[indexPath.section]
            let cell = tableView.dequeueReusableCell(withIdentifier: "controlCell") as! ControlCell
            cell.setNoti(active: activeEvent)
            cell.selectionStyle = .none
            cell.delegate = self
            cell.vc = self
            return cell
        } else {
            let activeEvent = activeEvents[indexPath.section]
            let activeComment = activeEvent.comments[indexPath.row - 2]
            let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell") as! CommentCell
            cell.setCell(comment: activeComment)
            return cell
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以做的一件事是在您的单元格中添加一个stackView,然后在该stackView中添加文本标签,只需将所有内容固定在边缘,并且不要在两个元素中都设置高度限制,这应该会自动调整单元格,在您的代码中也看不到它,但是我假设您正在tableView.rowHeight = UITableViewAutomaticDimension

中实现viewdidload()

您只需要检查约束即可,正如我所说的那样,要使自动尺寸标注正常工作,您无需在像元上设置高度约束,这是对您有用的链接raywenderlich.com/8549-self-sizing- table-view-cells