使用自定义单元格时,旋转会导致表格视图超出安全区域

问题描述 投票:0回答:2

旋转具有自定义单元格的表视图控制器时出现问题。我创建了一个简单的Table View Controller并按如下所示进行设置

import UIKit

class MyTableTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.register(CustomCellMain.self, forCellReuseIdentifier: "customCellMain")
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 2
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCellMain") as! CustomCellMain
        cell.mainImage = UIImage(named: "testtest.jpeg")
        cell.message = "Hello"
        cell.layoutSubviews()
        return cell
    }
}

我的自定义单元格看起来像这样:

import UIKit

class CustomCellMain: UITableViewCell {
    var message: String?
    var mainImage: UIImage?

    var messageView: UILabel = {
        var label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        //labelView.isScrollEnabled = false
        label.textAlignment = .right
        label.font = .systemFont(ofSize: 27)
        return label
    }()

    var mainImageView: UIImageView = {
        var imageView = UIImageView()
        imageView.sizeToFit()
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFit
        imageView.clipsToBounds = true
        imageView.layer.cornerRadius = 0
        return imageView
    }()

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.addSubview(mainImageView)
        self.addSubview(messageView)

        //Image
        mainImageView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 10).isActive = true
        mainImageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 9).isActive = true
        mainImageView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -8).isActive = true
        mainImageView.widthAnchor.constraint(equalToConstant: 75).isActive = true
        mainImageView.heightAnchor.constraint(equalToConstant: 75).isActive = true

        //Text
        messageView.leftAnchor.constraint(equalTo: self.mainImageView.rightAnchor).isActive = true
        messageView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -15).isActive = true
        messageView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        messageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 1).isActive = true
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        if let message = message {
            messageView.text = message
        }
        if let image = mainImage {
            mainImageView.image = image
        }
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

垂直看起来不错:

enter image description here

但是当我旋转它时,它遮住了左侧或右侧

enter image description here

enter image description here

我不知道是什么原因造成的。任何帮助将不胜感激!

ios swift xcode uitableview custom-cell
2个回答
0
投票

您可以使用Main.Storyboard

来解决
  • 转到Main.Storyboard
  • 选择您的UITableView
  • 转到Size Inspector
  • 在那个复选标记中选择Content View [TickMark] Insets To Safe Area的选项

如果不起作用,请尝试Content Insets下拉菜单选项

  • 有时在其中使用neverautomatic选项。

OR

  • 在您的自定义单元文件中尝试imageView.translatesAutoresizingMaskIntoConstraints = true

  • 在Main.Storyborad中,选择您的单元格,然后在SizeInspector的Layoutdropdown中将其赋予Translate Mask Into Constraints


0
投票

我决定用Table View创建一个View Controller。这解决了问题。我认为是因为我无法将实际的表格视图限制在外面的安全区域(自定义视图大于表格视图)。

© www.soinside.com 2019 - 2024. All rights reserved.