2016-07-06 19 views
0

イムによってUIScrollViewのとのUITableView高さを設定し、私はUIImageViewが上にある、私はUIScrollView内部UITableViewUIImageViewを持っている日 は、動的にiOSの開発に非常に新しいその内容

のカップルのためにこれで立ち往生してきましたテーブルの高さは静的なので、問題はありません。問題は UITableViewです。コンテンツに基づいて高さを動的に取得し、その高さをテーブルの高さ制約とcontentsizeに設定する必要がありますスクロールビューの

セルはセルフサイジングであるため、セルの高さは内容によって異なります。私がこれまでにできることは、contentSize.heightというプロパティを使用して高さを取得していますが、これはestimatedRowHeightに基づいて高さを返します。実際の高さではありません。

コード:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.dataSource = self 
    tableView.delegate = self 
    tableView.estimatedRowHeight = rowHeight 
    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.layoutIfNeeded() 
    tableHeight.constant = tableView.contentSize.height 
    scrollView.contentSize.height = imageView.bounds.height + tableView.contentSize.height 
} 

私が試したもの:コードに示すように、UITableViewcontentSize.heightプロパティを使用して高さを取得

  • をして前に説明しました。
  • 各行の高さを個別にwillDisplayCellに設定し、それをテーブルの高さ制約とスクロールビューのcontentSizeに追加します。しかし、これは実際よりも多くの行を追加するように見えます。テーブルの最後に空のセルがたくさんあります。 willDisplayCell内部コード:

    let cellHeight = cell.bounds.height 
    tableHeight.constant += cellHeight 
    scrollView.contentSize.height += cellHeight 
    
  • 前と同様、私は同じ結果とcellForRowAtIndexPath内部試みを除きます。

+0

最初の質問は、スクロールビュー内にテーブル(スクロールビューが組み込まれています)を使用し、テーブルのスクロール機能を無効にする高さを設定する理由は何ですか?次に、あなたが求めていることをするために、あなたのテーブルデータを繰り返すforループの中で手動で 'cellForRoAtIndexPath'を呼び出す必要があります。その関数から返された各セルの高さを取得し、すべての高さを結合してグローバルテーブルの高さを取得します。しかし、最初の質問に戻ると、なぜあなたのために既に行われていることをやり直すのですか(スクロールビュー内でスクロールするテーブル)? – Putz1103

+0

**あなたの答えは**このコンテンツをご覧ください** http://stackoverflow.com/questions/5628527/dynamically-set-uiscrollview-height-and-uitableview-height-depend-on-content –

答えて

4

Apple documentationUIScrollViewUITableViewを埋め込む思いとどまら:

あなたはUIScrollViewのオブジェクト内のUIWebViewかのUITableViewオブジェクトを埋め込むべきではありません。そうすると、2つのオブジェクトのタッチイベントが混在して誤って処理される可能性があるため、予期しない動作が発生する可能性があります。

問題を解決するには、UIImageViewをヘッダービューに配置するか、最初の行のセルを変更してイメージを表示します。 UITableViewDelegate、具体的にはtableView:heightForRowAtIndexPath:を使用してセルの高さを調整します。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // adjust the return based on the indexPath 
    return 30; 
} 
0

私には同じ問題があり、解決策が見つかりました。私はUIScrollViewの中にTableViewを持っていて、UIScrollViewの動的な高さを設定する方法を知らなかった。まず最初に、あなたのscrollViewを設定しなければなりません。ここでstackOverFlow(How to use UIScrollView in Storyboard)で確認できます。次のステップは、scrollView(これはtableViewのスーパービューでなければなりません)にtableViewの制約を設定することです。先頭、末尾、下端(下端が0、その他の場合は望みどおり) これで、UIScrollViewの動的な高さを設定する必要があります。これは2つの要素に依存します:あなたのデバイスの画面の高さとtableViewの高さ(tableViewのコンテンツは動的であるため)。あなたは、デバイスの決意をより快適にするために、この拡張機能を使用する必要が :私は、このやったそれらのものの後iOS: How to determine the current iPhone/device model in Swift?

var viewHeight: CGFloat = 0 

var modelDevice: String { 
    get { 
    return UIDevice.currentDevice().modelName 
    } 
} 

var tableViewHeight: CGFloat { 
    get { 
    // 90 is my tableViewCell's row height 
    return CGFloat(detail.cart.count) * 90 
    } 
} 

func configureSelfHeight(modelDevice: String) { 
    switch modelDevice { 
    case "iPhone 4", "iPhone 4s": viewHeight = 480 
    case "iPhone 5", "iPhone 5c", "iPhone 5s", "iPhone SE": viewHeight = 568 
    case "iPhone 6", "iPhone 6s", "iPhone 7": viewHeight = 667 
    case "iPhone 6 Plus", "iPhone 6s Plus", "iPhone 7 Plus": viewHeight = 736 
    default: viewHeight = 568 
    } 
    scrollView.contentSize.height = viewHeight + tableViewHeight 
} 

だけviewDidLayoutSubviews(内、このメソッドを呼び出すの):

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    configureSelfHeight(modelDevice) 
} 

私は願っています:)

関連する問題