【问题标题】:Change tableview dimensions based on if statement根据 if 语句更改 tableview 尺寸
【发布时间】:2018-03-15 14:13:51
【问题描述】:

我正在尝试根据来自前一个视图控制器的数据调整 tableView 的大小。例如:

if previousData == "Acitivites" {
    tableView.height = 375
    tableView.width = 300
} else {
    tableView.height = 480
    tableView.width = 300
}

我不确定如何实现这一点,我将不胜感激!

【问题讨论】:

  • 不清楚你在问什么
  • 如果从前一个控制器传入的数据满足特定条件,我希望表格视图填满整个屏幕。如果它不符合该标准,我希望表格视图只占据屏幕的一半。所以我试图在 if 语句中调整 tableview 的大小。
  • 故事板中有tableview吗?你在使用约束吗?
  • 是的,tableview 在故事板中,我目前没有约束,但我稍后会添加约束。
  • 因此您可以通过以编程方式设置 tableView 的 heightConstraint 来实现此目的。

标签: ios swift uitableview


【解决方案1】:

设置插座heightConstraintTableView of tableView

override func viewDidLayoutSubviews()
{
    heightConstraintTableView.constant = previousData == "Acitivites" ? 375 : 480

}

【讨论】:

    【解决方案2】:

    您可以在viewDidLayoutSubviews中检查条件并更改tableview的框架。

    override func viewDidLayoutSubviews()
    {
        if previousData == "Acitivites" {
            tableView.frame = CGRect(x: 0, y: 0, width: 300, height: 375)
        }
        else
        {
            tableView.frame = CGRect(x: 0, y: 0, width: 300, height: 480)
        }
    }
    

    【讨论】:

    • 不建议在viewDIdLoad() 中更改框架,请在viewDidLayoutSubviews() 中执行此操作
    • 为什么在viewdidload中设置这个是错误的?这里描述的函数会被调用多次,不需要
    【解决方案3】:

    您可以像下面这样动态设置约束...

    override func viewDidLayoutSubviews() {
    
    
        //setting height var
        var height: CGFloat = (previousData == "Acitivites") ? 375 : 480
    
        //top constraint
        tableView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
    
        //leading constraint
        tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    
        //trailing constraint
        tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    
        //height constraint
        tableView.heightAnchor.constraint(equalToConstant: height).isActive = true
    
        //setting height priority to avoid constraint breaking bcoz height, top and bottom is set
        let bottomconstraint = tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
        bottomconstraint.priority = .defaultHigh
        bottomconstraint.isActive = true
    
    }
    

    如果您已经为高度限制创建了 IBOutlet,那么您可以通过编程方式对其进行设置。

    self.heightConstraint_tableView.constant = <new height>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多