2017-03-19 2 views
0

UILabel을 숨기려고합니다!UILabel Swift 숨기기 방법 : 레이블이 숨김으로 설정된 경우 레이블이 테이블보기 컨트롤러에 공간을 만듭니다.

저는 UIlabel, TableView & Segmented Control을 포함하는 테이블 뷰 컨트롤러를 사용했습니다.

두 개의 범주 중 하나는 데이터 & 빈 데이터입니다.

사용자가 데이터를 클릭하면 데이터가 TableView에 표시됩니다. & 레이블이 숨겨져 야합니다.

사용자가 빈 -> 데이터를 숨길 경우 & 레이블이 나타납니다.

나는 그렇게 할 수 ...하지만 라벨 (그것은 간격 만들고있다) 여기에 문제를하고있다

문제 :있을 때

레이블 테이블보기의 상단에 틈을 만들고있다 데이터.

질문 :이 숨겨진 경우

  1. 어떻게 라벨을 제거합니다.

  2. 레이블을보기의 중앙에 표시하고 싶습니다 (사용자에게 친숙 함).

스크린 샷 : 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() 
    } 
+0

IBAction에서 viewDidLoad

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

당신이 자동 레이아웃 사용하고 당신에

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

? – iMuzahid

+0

@ Md.MuzahidulIslam 아니요, 자동 레이아웃을 사용하지 않습니다 – Karen

답변

3

아래와 같이 프레임 높이를 UILabel으로 변경하면 문제를 해결할 수 있습니다.

@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() 
    } 
+0

감사합니다. – Karen