如果有任何数据且表视图中没有数据,如何调整表视图的大小

时间:2016-12-07 05:37:25

标签: ios swift uitableview

我有一个标题为“当前团队”的屏幕,下面是一个表格视图,下面是一个带+按钮的文本字段。因此,当用户在UITextField中输入任何数据时,如果用户按下+按钮,数据将添加到UITableView上方

这个打击图像是我当前的屏幕:

enter image description here enter image description here

现在,我在上面的屏幕上设计并添加了一些约束。现在,当表格视图中没有数据和至少一个数据时,标题和文本字段之间有更多空间。

但我需要的是:

我需要显示如下图像:

enter image description here

我不需要在该标题和文本字段之间显示空格。当表视图中至少有一个数据时,表视图的高度应该增加,文本字段也需要在下面。

我该如何处理:

我确实喜欢这个:

if currentTeams.visibleCells.count == 0 {

        tableViewHeight.constant = 5
    }

    else{
        tableViewHeight.constant = 50

    }

当前团队=表格视图名称

但它有用,请帮助我。我怎么能这样做?

代码片段:

   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView.isEqual(currentTeams) {
            return teamNames.count
        }
        return pastTeamNames.count

    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 20
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        if tableView.isEqual(currentTeams) {
            return getCellForRow(indexPath)
        }
        return getCellForPastTeamsRow(indexPath)
    }

4 个答案:

答案 0 :(得分:1)

您可以通过在桌面上使用修复UITableviewCell 来实现相同目的。如果您最初没有数据,请使用numberOfRowsInSection方法return 1

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return (<Your Array>.count > 1) ? <Your Array>.count + 1 : 1;
}

此1适用于包含加号UITextFieldUIButton的静态单元格。 因此cellForRow方法将为

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
      if (<Your Array>.count > 1)
    {
        if (indexPath.row < <Your Array>.count - 1)
        {
//        Initialize your UITableview cell which you have design to show your list
//            Your Code to show the list.
//            return your cell
        }
        if (indexPath.row==<Your Array>.count-1 ) {
//            Initialize and return the cell which you have design using UITextField and "Plus" Button
        }

    }
    else
    {
        //            Initialize and return the cell which you have design using UITextField and "Plus" Button
    }

你的设计就像是
enter image description here


您还可以查看示例From Github Here

答案 1 :(得分:1)

// your table hight constrain.
@IBOutlet var current_team_tablehight: NSLayoutConstraint! 
 @IBOutlet var playpast_role_table_hight: NSLayoutConstraint!
 @IBOutlet var past_team_table_hight: NSLayoutConstraint!
 @IBOutlet var certificate_table_hight: NSLayoutConstraint!

 override func viewDidLoad() {
        super.viewDidLoad()
       // put it as 0 for default 
        current_team_tablehight.constant = 0
        certificate_table_hight.constant = 0
        past_team_table_hight.constant = 0
        playpast_role_table_hight.constant = 0 
 }



override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(true)
        if profileData.FirstName.length > 0 {
            // data available for that table then . 
            currentTeams.reloadData()
            current_team_tablehight.constant = currentTeams.contentSize.height + 5;
            pastTeams.reloadData()
            past_team_table_hight.constant = pastTeams.contentSize.height + 5;

            playedTableView.reloadData()
            playpast_role_table_hight.constant = playedTableView.contentSize.height + 5;

            certificationtableview.reloadData()
            certificate_table_hight.constant = certificationtableview.contentSize.height + 5;
   }
}


func deleteTeamFromCurrentTeams(sender: UIButton) {
        let but = sender
        let view = but.superview!
        let cell = view.superview as! CurrentTeamsTableViewCell
        if let tblView = cell.superview?.superview as? UITableView {

            if tblView.isEqual(self.currentTeams) {
                let indexPath = currentTeams.indexPathForCell(cell)
                teamNames.removeAtIndex((indexPath?.row)!)

                currentTeams.reloadData()
                if teamNames.count > 0 {
                    current_team_tablehight.constant = currentTeams.contentSize.height;
                }else{
                    current_team_tablehight.constant = 0;
                }

            }
            else if tblView.isEqual(self.pastTeams) {
                let indexPath = pastTeams.indexPathForCell(cell)
                pastTeamNames.removeAtIndex((indexPath?.row)!)

                pastTeams.reloadData()
                if pastTeamNames.count > 0 {
                    past_team_table_hight.constant = pastTeams.contentSize.height;
                }else{
                    past_team_table_hight.constant = 0;
                }

            }
            else if tblView.isEqual(self.playedTableView) {

                let indexPath = playedTableView.indexPathForCell(cell)
                playedTeamNames.removeAtIndex((indexPath?.row)!)

                playedTableView.reloadData()
                if playedTeamNames.count > 0 {
                    playpast_role_table_hight.constant = playedTableView.contentSize.height;
                }else{
                    playpast_role_table_hight.constant = 0;
                }

            }

            else
            {
                let indexPath = certificationtableview.indexPathForCell(cell)
                ExpTeamNames.removeAtIndex((indexPath?.row)!)

                certificationtableview.reloadData()
                if ExpTeamNames.count > 0 {
                    certificate_table_hight.constant = certificationtableview.contentSize.height;
                }else{
                    certificate_table_hight.constant = 0;
                }


            }


        }
        self.view .layoutIfNeeded()
        self.view .setNeedsLayout()

    }
 @IBAction func addPastTeamsPressed(sender: AnyObject) {

        if pastTeamName.text?.trimWhiteSpace != "" && pastTeamName.text?.trimWhiteSpace != "-" {
            pastTeamNames.append(pastTeamName.textVal)
            pastTeamName.text = ""
            pastTeams.reloadData()
             past_team_table_hight.constant = pastTeams.contentSize.height + 5;

        }
    }


    @IBAction func addTeamsPressed(sender: AnyObject) {
        if teamName.text?.trimWhiteSpace != "" && teamName.text?.trimWhiteSpace != "-" {
            teamNames.append(teamName.textVal)
            teamName.text = ""
            currentTeams.reloadData()
            current_team_tablehight.constant = currentTeams.contentSize.height + 5;
        }


    }

    // for played role
    @IBAction func addPlayedTeamsPressed(sender: AnyObject) {

        if playedTeam.text?.trimWhiteSpace != "" && playedTeam.text?.trimWhiteSpace != "-" {
            playedTeamNames.append(playedTeam.textVal)
            playedTeam.text = ""
            playedTableView.reloadData()
            playpast_role_table_hight.constant = playedTableView.contentSize.height + 5;
        }



    }


    @IBAction func addcertificatecoursePressed(sender: AnyObject) {


        if Experience.text?.trimWhiteSpace != "" && Experience.text?.trimWhiteSpace != "-" {
            ExpTeamNames.append(Experience.textVal)
            Experience.text = ""
            certificationtableview.reloadData()
            certificate_table_hight.constant = certificationtableview.contentSize.height + 5;
        }


    }

输出:

default screen

Multiple data

答案 2 :(得分:0)

通过将tableView行高设置为UITableViewAutomaticDimension,可以获得动态单元格高度。而且你需要提供估计的高度。所以在你的viewdidload中添加以下代码:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140 // or your estimated height

然后在tableview单元格中使用autolayout来调整项目和容器高度

答案 3 :(得分:0)

设置你的约束 -

  • 首先,您应该拥有UILabel用于&#34;当前团队&#34;对superView有一个前导,尾随和顶部约束。
  • UITableView添加到UILabel的前导,尾随和顶部以及优先级为250的固定高度,让它最初置于0。
  • UITextField的前导,尾随,固定高度,顶部添加到UITableView,并使用>=0
  • 添加到superView的底部间距

这将允许UITextField始终贴在UITableView的底部。

UITableView中为UIViewController身高限制设置一个出口。 现在,如果您可以使用默认的UITableViewCell高度,那么您的工作就更容易了,否则您将不得不计算每个字符串在单元格内获取的高度并获得该值。在viewDidLoad更新UITableView高度限制为 -

//do this after you do the insertion into the tableview

tableViewHeightConstraint.constant = numberOfRows * rowHeight

view.layoutIfNeeded()

每次在UITableView中添加或删除行时,都必须更新此高度。一旦您的单元格占据整个屏幕,高度约束就会中断,UITextField将被卡在底部,UITableView将变为可滚动。

修改:您必须以编程方式重新添加高度限制 UITableView停止占用整个屏幕。