ven titulo tablas siempre repetir ocultar mantener letras las funciona filas encabezados encabezado cómo como columnas columna swift xcode uitableview storyboard

swift - titulo - Cambiar el tamaño del encabezado de la tabla al usar tipos dinámicos



repetir filas de titulo en word 2010 no funciona (3)

Tengo un TableViewController con un encabezado. Este encabezado es un contenedor, que se vincula a otro guión gráfico llamado Header.storyboard

Header.storyboard contiene una vista de pila con algunas etiquetas, que se escriben de forma dinámica.

El texto de las etiquetas proviene de DB.

No importa la dimensión o el tamaño del texto, quiero visualizarlo correctamente.

He usado algunas respuestas de SO para obtener el tamaño correcto del encabezado, pero sin suerte:

import UIKit class TableViewController: UITableViewController { @IBOutlet weak var tableHeaderView: UIView! override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // Dynamic sizing for the header view if let headerView = tableHeaderView { headerView.setNeedsLayout() headerView.layoutIfNeeded() let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height var headerFrame = headerView.frame // If we don''t have this check, viewDidLayoutSubviews() will get // repeatedly, causing the app to hang. if height != headerFrame.size.height { headerFrame.size.height = height headerView.frame = headerFrame tableHeaderView = headerView } } } }


intenta implementar

tableView(_ tableView: UITableView, heightForHeaderInSection section: Int)

y

tableView(_ tableView: UITableView, viewForHeaderInSection section: Int)
tu código debería verse así:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return tableHeaderView.bounds.size.height } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { return tableHeaderView }


El encabezado de la vista de tabla puede redimensionarse automáticamente

pero con contenedores es probable que no funcione

use vista personalizada en su lugar para viewForHeaderInSection

class ViewController: UITableViewController { override func viewDidLoad() { tableView.estimatedSectionHeaderHeight = 10 tableView.sectionHeaderHeight = UITableViewAutomaticDimension } override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let lab = UILabel() lab.text = "text /(section)" lab.font = UIFont.systemFont(ofSize: 10 * CGFloat(section) + 1) return lab } override func numberOfSections(in tableView: UITableView) -> Int { return 5 } //this method overriding is not necessary override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableViewAutomaticDimension } }


Primero, en lugar de darle la altura a la vista, debe darle a la etiqueta una altura

class ViewController : UITableViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 40 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 4 } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.backgroundColor = UIColor.yellow cell.textLabel?.text = "Baran" return cell } override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return heightForView() } override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView : UIView = UIView(frame: CGRect(x: 0, y: 20, width: self.view.frame.width, height: self.heightForView())) headerView.backgroundColor = UIColor.black let label : UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.heightForView())) label.numberOfLines = 0 label.textAlignment = NSTextAlignment.center label.text = "Size To Fit Tutorial" label.font = UIFont(name: "Helvetica", size: 50) label.textColor = UIColor.white headerView.addSubview(label) return headerView } //Self Sizing height .... func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat{ let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude)) label.numberOfLines = 0 label.lineBreakMode = NSLineBreakMode.byCharWrapping label.font = font label.text = text label.sizeToFit() return label.frame.height } func heightForView() -> CGFloat{ let screenSize = UIScreen.main.bounds let screenWidth = screenSize.width let text = "Size To Fit Tutorial" let font : UIFont! switch UIDevice.current.userInterfaceIdiom { case .pad: font = UIFont(name: "Helvetica", size: 35) case .phone: font = UIFont(name: "Helvetica", size: 50) default: font = UIFont(name: "Helvetica", size: 24) } let height = heightForLabel(text: text, font: font, width: screenWidth) return height } }

enter image description here

Espero que esto ayude