0

私のアプリは現在このように読み込まれます。ご覧のとおり、セルがセル全体を埋めていないため、これは理想的ではありません。また、すべてのセルの一番左にあることに気が付くと、白い区切り線がセルの終わりの前で止まっています。

DayofWeekSpendingTableViewCell.xibテーブルビュー セルをカスタマイズするためにnib ファイルを使用しています。

UITableViewController SummaryTableViewControllernibファイルをロードする場所があります。この方法tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)では、2 つのラベルのフレームを設定して、ビューの幅を占めるようにしようとしましたが、アプリがまだこのように読み込まれるため、役に立ちません。

class SummaryTableViewController: UITableViewController {    
    override func viewDidLoad() {
        super.viewDidLoad()

        dayOfWeek = [ .Mon, .Tue, .Wed, .Thu, .Fri, .Sat, .Sun]
        totalSpentPerDay = [0, 7.27, 0, 0, 39, 0, 0]

        // Create a nib for reusing
        let nib = UINib(nibName: "DayofWeekSpendingTableViewCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "nibCell")

        self.tableView.separatorColor = UIColor.whiteColor()
    }

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

        // Configure the cell...
        let cell = tableView.dequeueReusableCellWithIdentifier("nibCell", forIndexPath: indexPath) as! DayOfWeekTableViewCell
        let day = dayOfWeek[indexPath.row]

        let height = CGFloat(55)
        let dayOfWeekWidth = CGFloat(80)
        cell.dayOfWeek.text = day.rawValue.uppercaseString
        cell.dayOfWeek.frame = CGRectMake(0, 0, dayOfWeekWidth, height)
        cell.dayOfWeek.backgroundColor = colorOfDay[day]

        cell.totalAmountSpent.text = "$\(totalSpentPerDay[indexPath.row])"
        cell.totalAmountSpent.frame = CGRectMake(cell.dayOfWeek.frame.maxX + 1, 0, view.bounds.width - dayOfWeekWidth, height)
        cell.totalAmountSpent.backgroundColor = colorOfDay[day]

        return cell
    }
}

ビューに合わせてカスタム UITableViewCell nib ファイルを作成する方法を誰かに教えてもらえたら、とても感謝しています!

4

3 に答える 3

4

それで、私が見るいくつかのこと。まず、セル nib で AutoLayout 制約を使用できるようです。あなたのペン先はおそらく320px幅のようなものです. 実行時に、セルのコンテンツ ビューは実際には拡張されて、より大きなデバイスの新しい幅を埋めますが、配置した緑色のビューは 320px 構成のままです。コンテンツ ビューの色を変更し、その色がシミュレーターに表示されることを確認することで、これをテストできます。私はあなたの細胞をここに再現しました:

ここに画像の説明を入力

ピンクのビューは固定幅で、コンテンツ ビューの上、左、下に配置されます。青いビューは、ピンクのビューの右に 4 ポイントあり、真ん中に白い余白ができます。コンテンツ ビューの上部、右側、および下部に配置されます。そのため、セルのコンテンツ ビューのサイズが変更されると、AutoLayout 制約によって青色のビューが引き伸ばされ、その右端がコンテンツ ビューの右端と同じ高さになるようになります。

エッジ インセットの場合、最初にテーブル各セルにエッジ インセットを設定します。ストーリーボード/ニブでそれを行うか、コードで次のようにすることができます:

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let nib = UINib(nibName: "yubnub", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "yub")

        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
    }


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

        return 10
    }

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

        return tableView.dequeueReusableCellWithIdentifier("yub", forIndexPath: indexPath)
    }

    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

        cell.layoutMargins = UIEdgeInsets.zero
    }
}
于 2016-01-08T05:27:45.230 に答える
3

次のソリューションを適用します。

1)最初に、ストーリーボードのサイズインスペクターからテーブルビューに完全な自動サイズ変更の制約を与えます。

2) nib ファイルに移動し、tableViewcell を選択して完全な制約を与えます。

3) 左側のラベルを選択し、それに左と上への制約を与え、右側のラベルに右、上、中央の制約を与えます。

ビュー コントローラーに heightForRowatIndexPath デリゲート メソッドを実装し、カスタム xib にある nib ファイルと同じ高さについて言及することを忘れないでください。

于 2016-01-08T05:33:21.723 に答える