相对于 UITableview 更改 UIView 高度

Posted

技术标签:

【中文标题】相对于 UITableview 更改 UIView 高度【英文标题】:Change UIView height with respect to UITableview 【发布时间】:2016-06-20 07:23:15 【问题描述】:

我在 AlarmView 中有一个名为 AlarmView 的视图和一个名为 alarmtableview 的表视图,还有一个文本字段 现在我想要的是当用户在 textfield 中输入任何数字时,tableview 将重新加载与用户输入的数字相等的行数。 我最初将 AlarmView 高度设置为 0 ,因此当文本字段为空时,AlarmView 对用户仍然不可见。 并且在重新加载 alarmtableview 之后,我正在更新 detailview 的高度等于 tableview 的高度。 但是当我运行应用程序时,视图的高度不会更新。即使在重新加载 tableview 后,它仍然对用户不可见

下面是我为实现相同而编写的代码

@IBOutlet weak var AlarmViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var AlarmView: UIView!
@IBOutlet weak var AlarmTableView: UITableView!
@IBOutlet weak var FrequencyField: CustomUITextField!


func textFieldDidEndEditing(textField: UITextField) 

    print("textFieldDidEndEditing called")
    if textField === FrequencyField
        self.AlarmToggleAction(self.AlarmSwitch)
    

//MARK: ALARM Actions
@IBAction func AlarmToggleAction(sender: UISwitch) 
    if sender.on
        if let count = Int(self.FrequencyField.text!) 
            print("ON state")
            alarmCount = count
            AlarmTableView.reloadData()

            print("AlarmTableView.frame.height : \(AlarmTableView.frame.height)")
            AlarmViewHeightConstraint.constant = AlarmTableView.frame.height
        
    
    else
        print("OFF state")
        alarmCount = 0
        //AlarmTableView.reloadData()
        //AlarmViewHeightConstraint.constant = 0

    




//MARK: Tableview Actions
func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1



func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    print("numberOfRowsInSection called alarmCount : \(alarmCount)")

    return alarmCount



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
   print("cellForRowAtIndexPath called")
        let cell = tableView.dequeueReusableCellWithIdentifier("AlarmCell") as! AlarmCell
        cell.TimeLabel.text = "Alarm \(indexPath.row + 1)"
        cell.TimeField.tag = indexPath.row

        cell.TimeSwitch.tag = indexPath.row

        return cell

请帮我解决这个问题。 提前致谢

【问题讨论】:

如果你有适当的约束,它会自动完成而无需任何代码 什么应该是适当的约束 只是固定了所有边,并给 tableview >= 高度约束 使用自动布局很容易,只要等于detailview和tableview的高度。只需根据条件隐藏或显示视图 tableview行高的委托方法实现在哪里?用这种方法处理你的高度,然后你只需要重新加载 tabledata 【参考方案1】:

尝试使用contentSize,而不是像这样的帧大小:

AlarmViewHeightConstraint.constant = AlarmTableView.contentSize.height

【讨论】:

以上是关于相对于 UITableview 更改 UIView 高度的主要内容,如果未能解决你的问题,请参考以下文章

更改 UIView 框架大小不会更改 UITableview 框架原点 y

获取 UITableView 的 IndexPath 以更改 UIView 的颜色

UITableview 没有在 iOS 中使用自动布局调整大小

类似于 UIRefreshControl 将隐藏的 UIView 添加到 UITableView

UIView 框架、边界和中心

如何使用子视图的延迟/动态加载实现自定义 UIView,类似于 UITableView