动态表视图单元格&内容大小冲突& Pintrest布局

时间:2016-03-10 07:06:27

标签: ios swift uitableview uicollectionview

在我目前的要求中,我想开发一个Pintrest布局视图。为此 我在同一个ScrollView上有2个tableView

标记:我没有使用collectionView,因为很难为此目的自定义流程布局。我不想为此包含第三方框架。

查看附带的屏幕截图 -

enter image description here

用2个阵列填充它们,偶数和&一个奇数物品 。 我正在制作这些 tableView的不可滚动 & 根据最高的tableView 增加我的scrollView的contentView的高度。 tableView都具有动态增加内容的自定义单元格 ,即标签。

我的viewDidLoad()

中的

Executing /opt/worker/runenv/bin/celery --app=skyworker flower --port=5555 in /opt/worker/runenv
我的DataSource方法中的

-

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

但我的问题是桌子没有正确计算其内容的大小。我做了一些搜索,这里有一个问题的答案说 - 当你给出estimatedRowHeight

时, contentSize会搞砸

那么我有什么选择?如何正确实现这一目标可以做什么?

1 个答案:

答案 0 :(得分:0)

您可以使用tableView的contentSize属性来获取tableView所需的高度。

我已经做了一个演示来测试它,它正在按照您的预期工作。

enter image description here

我的约束如下:

  
      
  1. 滚动型:
  2.         

    LeadingSpace到SuperView,TrailingSpace到SuperView,TopSpace到   SuperView,BottomSpace到SuperView

         
        
    1. ContainerView(UIView里面的scrollView):
    2.         

      LeadingSpace到SuperView,TrailingSpace到SuperView,TopSpace到   SuperView,BottomSpace到SuperView,EqualWidth到SuperView(即   滚动视图)

           
          
      1. ATableView
      2.         

        LeadingSpace到SuperView,TrailingSpace到BTableView,TopSpace到   SuperView,宽度固定点,高度固定点(创建出口)   这个约束),BottomSpace到SuperView with StandardSpacing和   LowPriority(250)

             
            
        1. BTableView
        2.         

          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
}
}