如何隐藏UILabel Swift:当Label设置为hidden时,Label正在表视图控制器中创建空间

时间:2017-03-19 01:09:01

标签: ios swift uitableview uilabel

我试图隐藏UILabel ..!

我在故事板中使用了一个表视图控制器,其中包含UIlabelTableView& Segmented Control

我有两个类别,一个是Data&空数据。

当用户点击数据时 - >数据应出现在TableView&标签应隐藏。

当用户点击Empty - >数据应隐藏&标签应该出现。

我能做到这一点......但是Label在这里遇到了一个问题(它正在创造一个差距)

问题:

当有数据时,Label正在表视图的顶部创建一个间隙。

问题:

  1. 如何在隐藏标签时删除标签。

  2. 我想在视图的中心显示标签(用户友好)。

  3. 截图: Stoaryboard

    StoaryBoard 1

    模拟器: enter image description here enter image description here

    代码:

    // MARK: - Properties
        let sectionHeaders = ["One","Two"];
        var rowValues = [["First","Second","Three"],["four","five","six"]];
    
        // MARK: - IBOutlets
        @IBOutlet weak var noDataLabel: UILabel!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.title = "Table View"
            noDataLabel.isHidden = true
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        // MARK: - Table view data source
    
        override func numberOfSections(in tableView: UITableView) -> Int {
            if (rowValues.isEmpty) {
                return 0
            } else {
                return sectionHeaders.count
            }
        }
    
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if (rowValues.isEmpty) {
                return 0
            } else {
                return rowValues[section].count
            }
        }
    
        override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            return sectionHeaders[section]
        }
    
        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
            cell.textLabel?.text = rowValues[indexPath.section][indexPath.row];
    
            return cell
        }
    
        // MARK: - IBActions
    
        @IBAction func segmentButtonPressed(_ sender: UISegmentedControl) {
            if sender.selectedSegmentIndex == 0 {
                if rowValues.isEmpty {
                    noDataLabel.isHidden = true
                    rowValues = [["First","Second","Three"],["four","five","six"]];
                }
            } else {
                rowValues.removeAll()
                noDataLabel.isHidden = false
            }
            tableView.reloadData()
        }
    

1 个答案:

答案 0 :(得分:4)

您可以更改UILabel框架高度,如下所示,这将解决您的问题。

func editLabelHeight(edit: Bool) {
        if edit {
            var labelFrame = noDataLabel.frame
            labelFrame.size.height = 0
            noDataLabel.frame = labelFrame
        }
        else {
            var labelFrame = noDataLabel.frame
            labelFrame.size.height = 44
            noDataLabel.frame = labelFrame
        }
    }

viewDidLoad

override func viewDidLoad() {
        super.viewDidLoad()
        editLabelHeight(edit: true)
    }

IBAction

@IBAction func segmentButtonPressed(_ sender: UISegmentedControl) {
        if sender.selectedSegmentIndex == 0 {
            if rowValues.isEmpty {
                noDataLabel.isHidden = true
                editLabelHeight(edit: true)
                rowValues = [["First","Second","Three"],["four","five","six"]]
            }
        } else {
            rowValues.removeAll()
            editLabelHeight(edit: false)
            noDataLabel.isHidden = false
        }
        tableView.reloadData()
    }