Swift表视图单元格布局折叠所有元素

时间:2018-05-04 06:08:42

标签: ios swift

我对Swift和iOS编程很新,但我遇到了以下问题。我正在研究TableViewController,在第一个单元格中,我开始设计我的布局。 我创建了一个视图,所有边都有0边距和150高度,然后我将所有组件排列在一个水平堆栈视图里面,并添加了我认为合适的约束。在故事板上,一切看起来都很好,但是当我在模拟器上运行应用程序时,所有元素都会崩溃并且不能保持它们的比例。这是故事板的截图。

ViewCell in Storyboard

据我所知,ContentView和tableCell似乎没有设置约束的方法,我尝试设置自定义行高或指定某些元素的高度和宽度,但它仍然会折叠。我能做错什么?

以下是它在模拟器上的外观:

emulator screencaupture

编辑添加代码 这是表视图控制器的代码

class UserPostsTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(RegisterPost(_:)))

        self.tableView.estimatedRowHeight = 150.0

        self.tableView.rowHeight = UITableViewAutomaticDimension

        let sv = UIViewController.displaySpinner(onView: self.view)

        let userName = userPreferences.object(forKey: "sessionEmail") as! String

        apiClient.GetPostsByUser(userName : userName) { response in
            self.posts = response
            self.tableView.reloadData()
            UIViewController.removeSpinner(spinner: sv)
        }
    }

    let apiClient = ApiClient()

    let userPreferences = UserDefaults.standard

    var posts = [Post]()

    @objc func RegisterPost(_ sender : UIButton){
        self.performSegue(withIdentifier: "registroPostSegue", sender: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

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


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "postIdentifier", for: indexPath) as! PostCellTableViewCell

        let post = posts[indexPath.row]

        cell.postLabel.text = post.nombre
        cell.categoryLabel.text = post.categoria
        cell.postImageView.kf.setImage(with: URL(string: post.imagen!))

        cell.postIsOpen(isOpen: post.abierto)

        return cell
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
        return 150.0
    }

}

编辑2 在此控制器上捕获元素分布

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试在代码中使用以下委托方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 150.0
}

编辑: 在swift:

func tableView(_ tableView: UITableView, 
     heightForRowAt indexPath: IndexPath) -> CGFloat{
 return 150.0
}

答案 1 :(得分:0)

如果你还没有添加这些:

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

希望这会有所帮助。快乐的编码。

答案 2 :(得分:0)

如果您的所有约束似乎都没问题。请使用以下

override func viewDidLoad() {
   super.viewDidLoad()
   tableView.estimatedRowHeight = 100
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
     return UITableViewAutomaticDimension
}

如果您在上面做了,仍然没有得到正确的结果。请检查UITableViewCell内部的约束。