在我目前的要求中,我想开发一个Pintrest布局视图。为此 我在同一个ScrollView上有2个tableView 。
标记:我没有使用collectionView,因为很难为此目的自定义流程布局。我不想为此包含第三方框架。
查看附带的屏幕截图 -
我 用2个阵列填充它们,偶数和&一个奇数物品 。 我正在制作这些 tableView的不可滚动 & 根据最高的tableView 增加我的scrollView的contentView的高度。 tableView都具有动态增加内容的自定义单元格 ,即标签。
我的viewDidLoad() 中的
- 但我的问题是桌子没有正确计算其内容的大小。我做了一些搜索,这里有一个问题的答案说 - 当你给出estimatedRowHeight
我的DataSource方法中的Executing /opt/worker/runenv/bin/celery --app=skyworker flower --port=5555 in /opt/worker/runenv
self.tableViewCol1.estimatedRowHeight = 296
self.tableViewCol1.rowHeight = UITableViewAutomaticDimension
self.tableViewCol1.separatorStyle = UITableViewCellSeparatorStyle.None
self.tableViewCol2.estimatedRowHeight = 296
self.tableViewCol2.rowHeight = UITableViewAutomaticDimension
self.tableViewCol2.separatorStyle = UITableViewCellSeparatorStyle.None
那么我有什么选择?如何正确实现这一目标可以做什么?
答案 0 :(得分:0)
您可以使用tableView的contentSize属性来获取tableView所需的高度。
我已经做了一个演示来测试它,它正在按照您的预期工作。
我的约束如下:
- 滚动型:
醇>LeadingSpace到SuperView,TrailingSpace到SuperView,TopSpace到 SuperView,BottomSpace到SuperView
- ContainerView(UIView里面的scrollView):
醇>LeadingSpace到SuperView,TrailingSpace到SuperView,TopSpace到 SuperView,BottomSpace到SuperView,EqualWidth到SuperView(即 滚动视图)
- ATableView
醇>LeadingSpace到SuperView,TrailingSpace到BTableView,TopSpace到 SuperView,宽度固定点,高度固定点(创建出口) 这个约束),BottomSpace到SuperView with StandardSpacing和 LowPriority(250)
- BTableView
醇>LeadingSpace到ATableView,TrailingSpace到SuperView,TopSpace到 SuperView,宽度固定点,高度固定点(创建出口) 这个约束),BottomSpace到SuperView with StandardSpacing和 LowPriority(250)
这是我的完整代码,
class ViewController: UIViewController {
@IBOutlet weak var tableViewA: UITableView!
@IBOutlet weak var tableViewB: UITableView!
@IBOutlet weak var heightConstraintBTableView: NSLayoutConstraint!
@IBOutlet weak var heightConstraintATableView: NSLayoutConstraint!
var tableViewACellCount = 50
var tableViewBCellCound = 20
override func viewDidLoad() {
super.viewDidLoad()
//Dont set estimatedRowHeight as it is displaying empty cell at the bottom of tableView (try playing with this uncomment estimatedRowHeight)
//tableViewA.estimatedRowHeight = 44.0
tableViewA.rowHeight = UITableViewAutomaticDimension
//tableViewB.estimatedRowHeight = 44.0
tableViewB.rowHeight = UITableViewAutomaticDimension
//Try both methods
self.performSelector("adjustTableViewHeight", withObject: [], afterDelay: 0.0)
//self.adjustTableViewHeight()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
if(tableView.isEqual(tableViewA)) { //A TableView
return tableViewACellCount
} else { //B TableView
return tableViewBCellCound
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("cell")
return cell!
}
func adjustTableViewHeight() {
dispatch_async(dispatch_get_main_queue()) { () -> Void in
self.tableViewA.layoutIfNeeded()
self.tableViewB.layoutIfNeeded()
}
heightConstraintATableView.constant = tableViewA.contentSize.height
heightConstraintBTableView.constant = tableViewB.contentSize.height
}
}