2016-07-14 8 views
0

PrototypeセルにIBでUIViewを作成し、制約を追加しました。セルにはカスタムクラスがあります。 cellForRowAtIndexPathのUIViewの幅を取得しようとすると、251ではなく476が返されます。この件名と多くの回答でSOを読み取った後、cellForRowAtIndexPathまたはサブクラスでsetNeedsLayoutおよびlayoutSubviews()を呼び出そうとしましたが、どちらも戻りません正しい値。高さ20は正しいです。どんな助けも大変ありがとう!UITableViewCell swiftでUIViewの正しい幅を取得する方法

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

    let cell = tableView.dequeueReusableCellWithIdentifier("EventCell") as! CustomResultsTVCell 

    // cell.setNeedsLayout() 

    let maxWidth = cell.barView.frame.width 
    print("barview maxWidth is \(maxWidth)") 
    // prints 476.0 

IB

+0

あなたが直面している問題は何ですか?内部にアイテムが正しく表示されていませんか? – jo3birdtalk

+0

セルビューのautolayoutプロパティを確認しましたか?幅の制約はありますか? – triandicAnt

+0

@ jo3birdtalk - 問題は、iphone5Sで実行されているデバイスの画面幅が320であることです。また、maxwidthはそれよりもはるかに大きく表示されています。 – richc

答えて

0

あなたは、これは幅があなたの親ビューtrailingの55とleadingスペースの10によるこのケースでCustomResultsTVCellマイナスであることをするだろう55と10のtrailingleading制約を追加しました。

ハードコードされた251幅を取得する場合は、Widthを251 constraintに設定する必要があります。

それともあなたが実際にあなたがtrailingleadingスペースを適用した後、251の幅を取得することとしていることを考えるならば、私はあなたのCustomResultsTVCellUITableViewための制約は、あなたが考えているの幅ではないと思います。たぶん私たちにもこれらの制約を示してくれるかもしれません。

+0

こんにちはZac、私は、そのデバイスの実行に応じて、これは私がハードコード251をしなかった理由です。私は、UIViewは、コンテンツビューに0の先行および後続の制約があるように、セルをクリアしました。 TableVCは、シミュレーションされたメトリックサイズがiPhone 4.7inchに設定されたViewContollerにあるContainerViewに埋め込まれています。したがって、UIViewは375ワイドでなければなりません。しかし、今では584でプリントします。シミュレートされたサイズを4inchに変更すると、359としてプリントされます。シミュレートされたサイズは、デバイス5Sで動作しているとき、どのように影響しますか?奇妙なこと.... – richc

+0

この場合、ここではシミュレーションのメトリクスのサイズが重すぎるかもしれません。一般的に、サイズを変更するビューコントローラ階層を配置します。実行時にContainerViewの幅をデバッグしてチェックしましたか? –

+0

うん、コンテナのビューは実行時に320幅です。 TableVCはコンテナに埋め込まれています。なんらかの理由で、TableVCはコンテナと同じディメンションをピックアップしていません。 – richc

関連する問題