我对Swift和iOS编程很新,但我遇到了以下问题。我正在研究TableViewController,在第一个单元格中,我开始设计我的布局。 我创建了一个视图,所有边都有0边距和150高度,然后我将所有组件排列在一个水平堆栈视图里面,并添加了我认为合适的约束。在故事板上,一切看起来都很好,但是当我在模拟器上运行应用程序时,所有元素都会崩溃并且不能保持它们的比例。这是故事板的截图。
据我所知,ContentView和tableCell似乎没有设置约束的方法,我尝试设置自定义行高或指定某些元素的高度和宽度,但它仍然会折叠。我能做错什么?
以下是它在模拟器上的外观:
编辑添加代码 这是表视图控制器的代码
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 在此控制器上捕获元素分布
答案 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内部的约束。