2017-03-12 3 views
-1

tableView가 비어 있고 하위보기에 레이블을 추가했는데 픽셀 화 된 것으로 보이는 메시지가 나타납니다. 그러나 내가 tableView에 무언가를 추가하고 삭제하면 메시지 (UILabel)가 완벽하게 정상적으로 표시됩니다. 이유를 알아낼 수 없습니다.subView에서 UILabel을 추가하면 픽셀 화됩니다.

self.tableView.backgroundView = emptyLabel에 라벨을 추가하면 두 개의 라벨을 추가하므로 픽셀 화되는 subView에 하나를 추가하고 싶습니다.

여기 내 코드입니다 :

class ReminderTableViewController: UITableViewController 
{ 

@IBOutlet var myTableView: UITableView! 
@IBOutlet weak var dateLabel: UIView! 
@IBAction func back(_ sender: Any) { 
    dismiss(animated: true, completion: nil) 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.separatorColor = UIColor.clear 
    tableView.separatorStyle = .none 
    } 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    performSegue(withIdentifier: "details", sender: self) 

} 
public func buttonImageForEmptyStateView() -> UIImage? { 
    return UIImage.init(named: "Exclamation Mark Filled-100-2") 
} 



override func viewDidAppear(_ animated: Bool) { 
    tableView.reloadData() 
    self.reloadEmptyState(forTableView: self.tableView) 

} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


override func numberOfSections(in tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 


    if list.count==0{ 
     let emptyLabel=UILabel(frame: CGRect(x: 0,y: 0, width: self.view.bounds.width, height: self.view.bounds.height)) 
     let emptyLabel2=UILabel(frame: CGRect(x: 0.0,y: 20.0, width: self.view.bounds.width, height: self.view.bounds.height)) 


     self.view.addSubview(emptyLabel2) 
     self.view.addSubview(emptyLabel) 

     let emptyImage = UIImageView(image: UIImage(named: "Quote Right Filled-100 (3)")) 
     emptyImage.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(emptyImage) 
     emptyImage.alpha=0.1 
     NSLayoutConstraint.activate([ 
      emptyImage.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), 
      emptyImage.centerYAnchor.constraint(equalTo: self.view.centerYAnchor), 
      emptyImage.heightAnchor.constraint(equalToConstant: 90), 
      emptyImage.widthAnchor.constraint(equalToConstant: 90) 
      ]) 


     emptyLabel.text = "no present reminders" 
     emptyLabel.textColor=UIColor.darkGray 
     emptyLabel.font=UIFont(name: "HelveticaNeue-Light", size: 18) 
     emptyLabel.textAlignment = NSTextAlignment.center 

     emptyLabel2.text = "you add by going back to the homescreen" 
     emptyLabel2.textColor=UIColor.gray 
     emptyLabel2.font=UIFont(name: "HelveticaNeue-Light", size: 11) 
     emptyLabel2.textAlignment = NSTextAlignment.center 


     self.tableView.separatorStyle = UITableViewCellSeparatorStyle.none 

     return 0 
    } 
    else{ 
     return (list.count) 
    } 

} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell=UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    cell.textLabel?.text=list[indexPath.row] 
    cell.contentView.backgroundColor = UIColor(red:0.89, green:0.89, blue:0.89, alpha:0.7) 
    cell.textLabel?.textColor=UIColor.black 
    cell.textLabel?.font=UIFont(name: "HelveticaNeue-Light", size: 16) 
    return (cell) 
} 





override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if editingStyle==UITableViewCellEditingStyle.delete{ 
     list.remove(at: indexPath.row) 
     tableView.reloadData() 
    } 
} 
} 
+0

라벨의 부모 (또는 부모의 부모 & C)에 변형이 있습니까? – Mustang

+0

아니요, 변환이 사용되지 않았습니다. –

+0

시뮬레이터 대신 아이폰에서 테스트 해 보셨습니까? –

답변

0

numberOfRowsInSection 통화를 여러 번, 그래서이 기능은 때마다 다른 UILabel의의 인스턴스가 계층 구조를 볼 수 추가 호출하기 때문에 하위 뷰를 추가하는 좋은 장소는 없다.

numberOfRowsInSection에 레이블 추가를 제거하십시오. 클래스 변수를 추가

var emptyLabel: UILabel! 
var emptyLabel2: UILabel! 
var emptyImage: UIImageView! 

viewDidLoad

numberOfRowsInSection의 기능을

func createEmptyLabels() { 
    emptyLabel=UILabel(frame: CGRect(x: 0,y: 0, width: self.view.bounds.width, height: self.view.bounds.height)) 
    emptyLabel2=UILabel(frame: CGRect(x: 0.0,y: 20.0, width: self.view.bounds.width, height: self.view.bounds.height)) 


    self.view.addSubview(emptyLabel2) 
    self.view.addSubview(emptyLabel) 

    emptyImage = UIImageView(image: UIImage(named: "Quote Right Filled-100 (3)")) 
    emptyImage.translatesAutoresizingMaskIntoConstraints = false 
    self.view.addSubview(emptyImage) 
    emptyImage.alpha=0.1 
    NSLayoutConstraint.activate([ 
     emptyImage.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), 
     emptyImage.centerYAnchor.constraint(equalTo: self.view.centerYAnchor), 
     emptyImage.heightAnchor.constraint(equalToConstant: 90), 
     emptyImage.widthAnchor.constraint(equalToConstant: 90) 
     ]) 


    emptyLabel.text = "no present reminders" 
    emptyLabel.textColor=UIColor.darkGray 
    emptyLabel.font=UIFont(name: "HelveticaNeue-Light", size: 18) 
    emptyLabel.textAlignment = NSTextAlignment.center 

    emptyLabel2.text = "you add by going back to the homescreen" 
    emptyLabel2.textColor=UIColor.gray 
    emptyLabel2.font=UIFont(name: "HelveticaNeue-Light", size: 11) 
    emptyLabel2.textAlignment = NSTextAlignment.center 

    emptyLabel.isHidden = true 
    emptyLabel2.isHidden = true 
    emptyImage.isHidden = true 
} 

호출이 기능을 추가

let hideEmptyViews = (list.count != 0) 
emptyLabel.isHidden = hideEmptyViews 
emptyLabel2.isHidden = hideEmptyViews 
emptyImage.isHidden = hideEmptyViews 
+0

코드를 수정했습니다. 다시 참조하십시오. –

+0

나는 나의 대답을 편집했다. 도움이되는지 알려주세요. :) –

+0

테이블에 항목이있을 때 label 및 imageView가 표시됩니다. 그것은 역의 역할을합니다. TableView가 비어있을 때 표시하려고합니다. –

1

당신은 numberOfRowsInSection에 레이블을 추가 할 수 있습니다. 문제는이 메서드가 여러 번 호출된다는 것입니다. 그래서 당신은 서로의 위에 겹쳐진 많은 복사본을 추가하고 있습니다. 그러면 레이블이 재미있어 보입니다.

+0

이 더미를 제거하고 레이블을 재미 있지 않게 만드는 방법. –

+0

레이블을 이미 추가 한 경우 아직 레이블이 추가되었으므로 다시 추가하지 마십시오. – matt

+0

저는 VC의 전체 코드를 추가했습니다. –