Swift表格视图单元

Swift表格视图单元,swift,uitableview,tableview,cell,Swift,Uitableview,Tableview,Cell,我正在尝试创建tableView单元格并自定义布局。但似乎我在我的细胞内添加的任何东西都会与细胞本身一样大小、高度和宽度。我怎样才能做到我可以随心所欲地设计我的细胞?i、 e,用边距和填充物使我的图像具有特定的大小。甚至我的文本高度也被拉伸到单元格高度。我添加了边框,这样就可以看到我的意思了。标签的高度应该正好是文本本身的大小,但它仍然在拉伸 我被tableview单元格困住了,想完全以编程方式设计单元格布局,而无需故事板。我一整天都在努力自学,只是一直在兜圈子 import UIKit

我正在尝试创建tableView单元格并自定义布局。但似乎我在我的细胞内添加的任何东西都会与细胞本身一样大小、高度和宽度。我怎样才能做到我可以随心所欲地设计我的细胞?i、 e,用边距和填充物使我的图像具有特定的大小。甚至我的文本高度也被拉伸到单元格高度。我添加了边框,这样就可以看到我的意思了。标签的高度应该正好是文本本身的大小,但它仍然在拉伸

我被tableview单元格困住了,想完全以编程方式设计单元格布局,而无需故事板。我一整天都在努力自学,只是一直在兜圈子

import UIKit
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        
        let tableView = UITableView()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
            self.tableView.delegate = self
            self.tableView.dataSource = self
            self.view.addSubview(self.tableView)
        }
        
        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            tableView.frame = view.bounds
        }
        
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
        }
        
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 200
        }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 8
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
            
            cell.textLabel?.text = "Here is some text"
            cell.textLabel?.layer.cornerRadius = 10
            cell.textLabel?.layer.borderWidth = 5
            cell.textLabel?.layer.borderColor = UIColor.black.cgColor
            
            cell.imageView?.image = UIImage(named: "spiderman")!
            cell.imageView?.layer.cornerRadius = 10
            cell.imageView?.layer.borderWidth = 5
            cell.imageView?.layer.borderColor = UIColor.black.cgColor
            return cell
        }
    }

这是因为您使用的是UITableViewCell的默认文本标签

如果打开故事板并使用“基本”样式的单元格,您将看到文本始终与中心对齐

我认为您不能直接调整这两个预定义属性(.textlab和.imageView)的高度或位置

尝试手动创建imageView和标签,不要直接使用cell.textLabel

例如:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    
    let label = UITextView(frame: CGRect(x: 200, y: 0, width: 500, height: 50))
    label.text = "Here is some text"
    label.layer.cornerRadius = 10
    label.layer.borderWidth = 5
    label.layer.borderColor = UIColor.black.cgColor
    cell.addSubview(label)
    
    let image = UIImage(named: "spiderman")!
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    imageView.image = image
    imageView.layer.cornerRadius = 10
    imageView.layer.borderWidth = 5
    imageView.layer.borderColor = UIColor.black.cgColor
    cell.addSubview(imageView);
    return cell
}

为此,请删除func tableView(u tableView:UITableView,heightForRowAt indexath:indexPath)->CGFloat{return 200}。来自代码。其设置为单元的静态高度。在故事板中为单元格组件提供高度。我的故事板中没有单元格。我都是通过编程实现的。这是唯一的办法吗?我没有接触过故事板。因此,当你通过编程设置单元格项目时,请提供它们的高度。这也不起作用,图像和txt仍然与单元格高度相同。即使我想更改txt或图像的位置,也不会发生任何移动,所以我知道如何理解你的意思。我尝试了你写的,这是一个进步。如果你看到故事板的来源,你会建议我改用故事板,还是完全可以编程。完全可以编程,如果你看到故事板的来源,他们正在以不同的格式做类似的事情。您仍然需要为这两个视图设置约束,以便它们可以在不同的屏幕大小下工作。在故事板中,您可以拖放并设置这些值。就我个人而言,我更喜欢在故事板中工作,但当多个开发人员在同一个故事板中工作并提出单独的请求时,很容易导致git冲突。好的,我将尝试故事板。菜鸟问题。如果我现在想在故事板中创建我的表视图,我如何使用我现在拥有的代码使其工作?或者我需要完全重建我的代码吗?2种方法,1是将UITableView作为视图添加到故事板中当前的UIViewController中,然后将其链接到tableView变量。~~~~另一种方法是在类和情节提要中替换UITableView。第二种方法需要很多更改,但您可以尝试、玩转并了解它的工作原理。最好查找有关如何创建新tableView的在线教程,因为您需要学习如何链接数据源和委托。