2016-08-14 3 views
0

私はSwiftにiOSアプリケーションを作成していました。私はテーブルビューシーンを作成しましたが、最初のサブビューのみを表示しています。コードをできるだけシンプルにしようとしました。 2つのラベルを持つテーブルビューセルを作成しましたが、最初のラベルだけが表示されます。コードは以下の通りです。 2番目のラベルが表示されないのはなぜですか?私のAutoLayoutの制約は間違っていますか?ありがとう!プログラムで作成されたUITableViewCellは、AutoLayoutで最初のサブビューのみを表示します

import UIKit 

class TestCell: UITableViewCell { 
    let viewsDict: [String : UILabel] = [ 
     "first": UILabel(), 
     "second": UILabel(), 
    ] 

    override func awakeFromNib() { 
     viewsDict["first"]!.text = "first" 
     viewsDict["second"]!.text = "second" 
     viewsDict["first"]!.translatesAutoresizingMaskIntoConstraints = false 
     viewsDict["second"]!.translatesAutoresizingMaskIntoConstraints = false 
     contentView.addSubview(viewsDict["first"]!) 
     contentView.addSubview(viewsDict["second"]!) 
     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[first]-[second]-|", options: [], metrics: nil, views: viewsDict)) 
     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[first]", options: [], metrics: nil, views: viewsDict)) 
     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[second]", options: [], metrics: nil, views: viewsDict)) 
    } 
} 

class TableViewController: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    // MARK: - Table view data source 

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     return tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 
    } 

} 
+0

IBでは、プロトタイプセルをドラッグして高さを高くし、2番目のサブビューを表示します...高さを自動的に調整できるかどうかはわかりません。 – user3323258

答えて

2

あなたのコメントから、セルの高さをプログラムで自動的に設定する方法があるようです。

self.tableView.rowHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedRowHeight = 60.0; 

あなたはまた、単にrowHeight設定することができます。

最も近いあなたはおそらく何をしたいと、iOSの8とした後、あなたはのtableViewはこの自体を計算することができます。これを行うにはいくつかの異なる方法があります。あなたのtableViewの財産と持っているすべての行が同じ高さ:

self.tableview.rowHeight = 60.0 

それとも、その場で行の高さを計算するためのデリゲートメソッドを実装することができます。この方法はまた、個々のセルを検査し、ビューを作成する必要がありますどのように背の高い決定することができます:

func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! TestCell 
    // Calculate the height that you want .. 
    let height = 60.0 
    return height 
} 

このStackOverflow postは自動的UITableViewCellサイジングにはるかに大きい深さになります。

関連する問題