Swift - 在 Xib 中动态设置 UITableView 高度
Swift - Dynamically set UITableView height in Xib
我尝试在 Xib 中动态设置 tableView 高度。但是所有元素在 xib 视图中动态变化,我没有到达 tableview 之前最后一个元素的 "y" 位置。
我试过类似的方法,但 work.It 没有显示在 mainView 的顶部。
techTableView = mainView?.technicalTableView
self.techTableView?.frame = CGRect(
x: 0,
y: (self.techTableView?.topAnchor.constraint(equalTo: (mainView?.productInformation.bottomAnchor)!, constant: 25).constant)! ,
width: self.view.frame.size.width,
height: 35)
您的代码似乎令人困惑,您试图通过使用锚点来设置 table 视图框架,这不是它的工作方式。如果您的目标是通过设置约束来完成它,那么您应该在添加 table 视图之后执行它,而不考虑其框架的值。
因此,在确保 techTableView
已添加到其超级视图(例如:view.addSubview(tableView)
)之后,您需要执行以下操作:
tableView.translatesAutoresizingMaskIntoConstraints = false
// x axis:
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0.0).isActive = true
// y axis:
tableView.topAnchor.constraint(equalTo: mainView?.productInformation.bottomAnchor, constant: 25.0).isActive = true
// width:
tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
// height:
tableView.heightAnchor.constraint(equalToConstant: 35.0).isActive = true
此时应该可以正常显示了,已经通过constraints处理,无需编辑frame(默认为CGRect.zero
)。
使用布局锚点设置约束而不是设置框架。你可以这样做来设置你的 tableview 的约束:
techTableView.translatesAutoresizingMaskIntoConstraints = false
techTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
techTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
techTableView.topAnchor.constraint(equalTo: mainView.bottomAnchor).isActive = true
techTableView.heightAnchor.constraint(equalToConstant: 35).isActive = true
我尝试在 Xib 中动态设置 tableView 高度。但是所有元素在 xib 视图中动态变化,我没有到达 tableview 之前最后一个元素的 "y" 位置。
我试过类似的方法,但 work.It 没有显示在 mainView 的顶部。
techTableView = mainView?.technicalTableView
self.techTableView?.frame = CGRect(
x: 0,
y: (self.techTableView?.topAnchor.constraint(equalTo: (mainView?.productInformation.bottomAnchor)!, constant: 25).constant)! ,
width: self.view.frame.size.width,
height: 35)
您的代码似乎令人困惑,您试图通过使用锚点来设置 table 视图框架,这不是它的工作方式。如果您的目标是通过设置约束来完成它,那么您应该在添加 table 视图之后执行它,而不考虑其框架的值。
因此,在确保 techTableView
已添加到其超级视图(例如:view.addSubview(tableView)
)之后,您需要执行以下操作:
tableView.translatesAutoresizingMaskIntoConstraints = false
// x axis:
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0.0).isActive = true
// y axis:
tableView.topAnchor.constraint(equalTo: mainView?.productInformation.bottomAnchor, constant: 25.0).isActive = true
// width:
tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
// height:
tableView.heightAnchor.constraint(equalToConstant: 35.0).isActive = true
此时应该可以正常显示了,已经通过constraints处理,无需编辑frame(默认为CGRect.zero
)。
使用布局锚点设置约束而不是设置框架。你可以这样做来设置你的 tableview 的约束:
techTableView.translatesAutoresizingMaskIntoConstraints = false
techTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
techTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
techTableView.topAnchor.constraint(equalTo: mainView.bottomAnchor).isActive = true
techTableView.heightAnchor.constraint(equalToConstant: 35).isActive = true