2016-12-16 1 views
0
func setTableHeader(){ 
     let headerWidth = Double(tableHeader.frame.width) 
// also tried let headerWidth = Double(tableView.frame.width) 
     print("header width is \(headerWidth)") 
} 

func viewWillAppear(){ output --> 351 
    setTableHeader() 
//also tried in View Did Appear 
} 

func viewDidDisappear(){ output --> 296 
    setTableHeader() 
} 

出力は、Iphone SEで実行されるときに発生するものを参照します。私はIphone 6ディスプレイを備えたStoryboardの制約を使ってテーブルビューとテーブルヘッダーを設計しました。私は、setTableHeaderを変更してview.frame.width(ストーリーボードの左右の制約)を反映させることで、私が望む結果を得ることができましたが、なぜこれを動作させることができなかったのだろうと思っていました。 ?また、実際には、setTableHeader内のテーブルヘッダーのサブビューのサイズを設定していますが、関連する場合は、これらのサブビューには制約がありません(プログラム的にもストーリーボードでも)。viewDidAppear後までテーブルビューまたはテーブルビューヘッダーの幅を取得する

ありがとうございます。

答えて

1

。viewDidLayoutSubviews())溶液のUIViewControllerを(上書きすることで、これを試して、それの制約に基づいてヘッダビューの適切なサイズを取得し、ヘッダにフレームを設定し、テーブルヘッダビュー

としてリセット
override func viewDidLayoutSubviews() { 
super.viewDidLayoutSubviews() 

// Dynamic sizing for the header view 
if let headerView = tableView.tableHeaderView { 
    let height = headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height 
    var headerFrame = headerView.frame 

    // If we don't have this check, viewDidLayoutSubviews() will get 
    // repeatedly, causing the app to hang. 
    if height != headerFrame.size.height { 
     headerFrame.size.height = height 
     headerView.frame = headerFrame 
     tableView.tableHeaderView = headerView 
    } 
} 
} 
0

viewDidLayoutSubviewsメソッドにこのコードを追加してください。 すべてのビューの実際のサイズはレイアウトを変更するだけです。方法viewDidLayoutSubviewsviewDidAppearの前に、viewWillAppearの後に呼び出されます。

関連する問題