2016-09-12 6 views
3

私はUITableViewCellの内側にラウンドのUIView(MYVIEW)を作成したいのUITableViewCell - 境界が適切にiOSの中で設定されている場合は10

私はそのようにそうするようにfunc awakeFromNib()を使用していたiOSの10前:

class MyCell: UITableViewCell { 

@IBOutlet var myView: UIView! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     print(myView.bounds.height) 
     myView.layer.cornerRadius = myView.bounds.height/2 
     myView.layer.masksToBounds = true 
    } 
} 

myView heightとwithは、私のストーリーボードのAutoLayout制約を介してに設定されています。

しかし、print(myView.bounds.height)を表示します。1000.0をコンソールに表示します。 したがって、コーナー半径命令では、半径をに、myViewを完全に消してしまいます。

iOS 10のライフサイクルの変更はUITableViewCellですか? iOS 10でview.boundsが設定されている機能は変わりませんか? iOS 10ではどのようにしてcornerRadiusをビューの高さの半分に設定できますか?

Here is a minimal projet to reproduce the issue

私は私UITableViewControllerに追加する必要が欲しいものに近い結果ました:...

答えて

0

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    tableView.reloadData() 
} 

をしかし、私は、これは最適ではない、かなり確信していますサブビューの境界を尋ねるとき、同じサイズの1000.0とまったく同じ問題がありました。値は信頼性がないフレームまたは境界として

もう私はストーリーボードで定義された高さの制約のためにIBOutletを宣言し、私の​​サブビューの角の半径を設定するためにそれを使用する必要がありました。

class MyCell: UITableViewCell { 

@IBOutlet var myView: UIView! 
@IBOutlet var myViewHeightConstraint: NSLayoutConstraint! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     print(myView.bounds.height) 
     myView.layer.cornerRadius = myViewHeightConstraint.constant/2 
     myView.layer.masksToBounds = true 
     } 
} 

これは本当にあなたが言ったように最適化されていませんreloadData呼び出しを削除することができます。

+0

はい私はこのソリューションも使用していますが、それは動作します...しかし、それはまだ私の周りの回避策です:/ –

+1

種類、はい、それは再ロードや再レイアウトを必要としないので、高価なことがあります。 – Sparga

3

私は同じ問題があり、それを修正する2つの方法を見つけました。どちらのレイアウトサブビューにセルを強制

まず解決策:

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.setNeedsLayout() 
    self.layoutIfNeeded() 
} 

第二の方法:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
     cell.setNeedsLayout() 
     cell.layoutIfNeeded() 
return cell 
} 
0

私の観察は、iOSの10/TVOS 10を呼び出す前に、自動レイアウトベースのビューをレイアウトされていないということですawakeFromNibでは、同じメソッドを呼び出す前に自動サイズ変更マスクを使用してビューをレイアウトしています。

ストーリーボードの自動レイアウト制約を削除し、新しい自動サイズ設定を使用することで、それが解決されました。私に

Autoresizing settings

これは、マスクを自動サイズより自動レイアウトは、信頼性の低いことができます。私はまたAutolayoutから切り替えた後にパフォーマンスの改善を感じています。私は、私がTVOS上にいて、Core Animation instrumentがTVOSで動作しないので、確かに言い表すことはできません。

関連する問題