2016-12-22 3 views
0

UIWindow内のUITableViewCellでサブビューの座標を変換しようとすると、画面の上にあるようにUINavigationBarの高さを追加せずに結果が得られますUINavigationController内にあります。たぶん私は間違ったことをしているのかもしれないUIWindowでUITableViewCellサブビューを計算中にUIView.convertが間違った結果を返す

open var targetView: UIView? { 
    didSet { 
     if let tView = targetView { 
      targetFrame = self.convert(self.frame, to: tView) 
     } 
    } 
} 

自己のUITableViewCell内部サブビューで、targetViewは、私はこれをテストするために、最も簡単なアプリケーションを作成し、それは完全に働いたUIApplication.shared.keyWindow

答えて

3

です。 superviewへの呼び出しが不足している可能性がありますが、ナビゲーションバーの高さの正確な違いがあるのは変です。とにかく試してください:私が使用何

targetFrame = self.superView!.convert(self.frame, to: tView) // TODO: remove the force-unwrap 

は、デリゲートメソッドを持つナビゲーションバーのテーブルビューだった:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let view = tableView.cellForRow(at: indexPath) 
    // let view = tableView.cellForRow(at: indexPath)?.textLabel // Also works 
     let parent = UIApplication.shared.keyWindow 
     let converted = view?.superview?.convert(view!.frame, to: parent) 
     print("\(converted)") 
    } 

印刷された値は、ナビゲーションバーがありました。

+0

スーパービューへの呼び出しは「主要キー」です。 – dev

+1

@devビューのフレームは、スーパービューの観点から定義されています。ビューの境界は内部からのものです。したがって、フレームの代わりに境界を変換することも、そのトリックを行う可能性があります。 –

関連する問題