ios - bars - Célula de vista de tabla de auto-tamaño en Xcode 9
tabs in ios (6)
Además de
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
debe establecer una restricción de altura para el contentView
del tabeleViewCell.
class CustomTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let height: CGFloat = 200
heightAnchor.constraint(equalToConstant: height).isActive = true
}
}
Tengo un UITableViewController
donde la celda UITableViewController
su tamaño correctamente usando Xcode 8 y Swift 3. Ahora que estoy usando Xcode 9 y Swift 4, no se están expandiendo y solo están usando la altura predeterminada de 44.
(Tengo alrededor de una oración o dos en cada UITableViewCell
)
Estaba usando esto antes
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
... pero fue capaz de comentarlo porque según Updating Your App for iOS 11 dijo que el valor predeterminado sería el tamaño propio ahora:
He intentado jugar cambiando el destino de la implementación a iOS 11, jugando en Storyboard (pero estoy usando un estilo básico de celdas de vista de tabla, así que no hay mucho AutoLayout por hacer), y no puedo averiguar qué está pasando.
Tengo el título de UILabel
configurado en 0 líneas, y tengo un ajuste de línea de UILabel
línea, pero aún no estoy llegando a ninguna parte cerca de lograr que la celda se expanda en función del contenido de texto que contiene dentro de Xcode 9. ¿Alguna idea?
¡Gracias!
Editar:
Aquí están las opciones (que no tengo) para fijar porque es una celda básica:
Obtuve el mismo problema y lo leí en muchos documentos; la respuesta satisfactoria fue algo como esto. Debe verificar ambas opciones para obtener la altura adecuada, porque se necesita una altura estimada para la configuración inicial de la interfaz de usuario, como las barras de desplazamiento y otras cosas similares. .
Proporcionar una estimación no negativa de la altura de las filas puede mejorar el rendimiento al cargar la vista de tabla. Si la tabla contiene filas de altura variable, puede ser costoso calcular todas sus alturas cuando se carga la tabla. El uso de la estimación le permite diferir parte del costo del cálculo de geometría desde el tiempo de carga hasta el tiempo de desplazamiento. Cuando crea una celda de vista de tabla de auto-dimensionamiento, necesita configurar esta propiedad y usar restricciones para definir el tamaño de la celda. El valor predeterminado es 0, lo que significa que no hay una estimación. (Documentación de Apple)>
ver esta imagen para storyboard
También tenga en cuenta que hay un error en xCode 9, cuando intenta aplicar la carga diferida en el cálculo automático de altura, se desplazará de forma inesperada, por lo que le recomiendo que use la forma programática a este respecto.
self.postTableView.estimatedRowHeight = 200;
self.postTableView.rowHeight = UITableViewAutomaticDimension;
algo como esto. ¡Gracias!
Tuve el mismo problema de vista de tabla rota. La solución fue solo un clic.
Vaya a su xib o escenas de guión gráfico con vistas de tabla, vaya al inspector de tamaño y verá las alturas de vista de tabla (incluso en vistas de tabla dinámicas) como 44, y las secciones serán 22. Simplemente haga clic en "automático" y aumente, Se presentará como se espera.
Tenga en cuenta que también especifico lo siguiente en viewDidLoad de la subclase UITableViewController (layoutSubviews resuelve problemas con la primera carga de un tableViewController que no se posiciona correctamente en relación con una barra de navegación no translúcida).
self.tableView.estimatedRowHeight = 180;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableView layoutSubviews];
Tuve el mismo problema y lo resolví con líneas de código:
class MyTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
}
Tal vez sea un error en Xcode.
Actualizar
Nuevo en Xcode 9 beta 3:
Interface Builder ahora es compatible con la configuración Seguridad estimada de UITableView. Esto permite que las celdas de la tabla se ajusten automáticamente al establecer la altura estimada en un valor distinto de cero, y está activada de forma predeterminada. (17995201)
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tblview: UITableView!
var selectindex = -1
var arrnumber = ["1","2","3","4","5"]
var image = ["index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrnumber.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as! ExpandableTableViewCell
cell.lblnumber.text = arrnumber[indexPath.row]
cell.img.image = UIImage(named: image[indexPath.row] as! String)
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if (selectindex == indexPath.row)
{
return 250
}
else{
return 60
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if(selectindex == indexPath.row)
{
selectindex = -1
}else{
selectindex = indexPath.row
}
self.tblview.beginUpdates()
self.tblview.endUpdates()
}
}