2017-01-17 6 views
1

私はダイナミックなサイズ、特に高さのテーブルセルを作成しようとしています。セルには4行のテキストとイメージビューが含まれています。通常、画像ビュー内の画像は大きな解像度を持つため、画像ビューに合わせてスケーリングする必要があります。内部の画像ビューを拡大/縮小するにはaspectFitモードを使用しました。私は、セルの高さをハードコーディングした場合スケーリング後の画像寸法の計算方法は?

Cell layout

は、画像ビューは、私は、スケーリング後の画像の大きさを計算する必要があり、余分なパディングを削除するには(色で強調表示)余分なスペース

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
    return 500 
} 

Horizontal image

を受け取ります。 私はそれをSwiftでどうやって行うことができますか?別の解決策を提供し

はまた、私はUITableViewAutomaticDimensionを試みたが、セルサイズが巨大になる(画像解像度に依存する)は、細胞の大きさは、フル解像度の画像に基づいて計算したようにではなく、上の(aspectFitモードで)スケーリングthis answerでは、このソリューションのパフォーマンスは非常に悪く、テーブルビューでは受け入れられません。私は画像が既にシステムの幅に合わせて拡大縮小されているので、スケールされた画像の寸法を知る必要があるという点で優れた解決策があると思います。

答えて

0

質問を投稿した後、新しい考えが浮かび上がりました。スケーリングモードが常にaspectFitであり、セル幅が常に同じなので、スケーリングされた係数を計算できることがわかっています。その後、セルの高さを計算できます。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
    // current cell height = 4 text lines + scaled image 

    // Number of text lines 
    let numberOfTextLines: CGFloat = 4.0 
    // Line height of font used in text labels 
    let textLineHeight = UIFont.systemFont(ofSize: 17).lineHeight 
    // Size of image to show in cell 
    let imageSize = imageRecords[indexPath.row].image!.size 
    // Scale factor: cell width to image width 
    let scale = self.tableView.bounds.width/imageSize.width 

    // Cell height = sum of all lines height + scaled image height 
    return (numberOfTextLines * textLineHeight) + (scale * imageSize.height) 
} 

セルの高さの精度を向上させるには、セルのマージンを考慮する必要があります。

0

制約が正しく設定されている場合、UITableViewAutomaticDimensionが必要なものを取得します。 (!ストーリーボード/ XIBを助け共有する)だけでスクリーンショットは難しいなりますが、あなたはおそらく、私が見たものに基づいて次の操作を実行したい:

  • はイメージビュー
  • の一番下の制約は、制約の追加と削除します下へコンテンツビューの下からの画像ビューの
  • 使用UITableViewAutomaticDimension

パフォーマンスは、まだ自動でいくつかのケースで吸うことができますディメンションは、しかし、それを与えるショット。

+0

残念ながら、コンテンツビューの下端から画像ビューの下端までの制約は、UITableViewAutomaticDimensionの同じ行の高さに制約を与えます。パディングサイズは以前と同じままでした。 – Jurasic

関連する問題