2017-01-25 15 views
0

imageViewとtextViewで構成されるtableViewヘッダーにビューを追加しました。画像ビューは上隅に揃えられ、テキストビューは画像ビュー上で次のように画面の右側に広がります。テーブルヘッダービュー内のexclusionPathsでtextviewのサイズを正しく変更する方法

references image

のTextViewは、動的なコンテンツを有しており、次のように設定除外経路を有することができる。

let imagePath = UIBezierPath(rect: imageView.frame) 
self.textView.textContainer.exclusionPaths = [imagePath] 

IがのTextViewに対して無効スクロールを有し、ヘッダビューの内部次の制約を設定しています。

のTextView:左 - 8px、右 - 8px、トップ - 0PX、下 - 8px

ImageViewの左 - 8px、幅 - 100pxに、高さ100pxに、トップ - 8px、下 - 以上

を8pxするために私のTextViewがダイナミックテキストが移入された後、私はこのコードを追加しました:調整す​​る

if let headerView = self.tableView.tableHeaderView { 
    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height 
    var headerFrame = headerView.frame 

    if height != headerFrame.size.height { 
     headerFrame.size.height = height 
     headerView.frame = headerFrame 
     self.tableView.tableHeaderView = headerView 
    } 
} 

ヘッダーのサイズただし、textViewのイメージの高さがテキストの高さよりも小さい場合は、ビューのサイズが大きくなります。 3行のテキストの

例:テキストの6行の enter image description here

例:ImageViewのを渡すために十分なテキストの enter image description here

例:これはなぜ enter image description here

誰もが知っていますハプニング?私はこの問題を自分自身が発生したため

+1

あなたの制約と制約の関係は適切ではありません。 –

答えて

1

私は、このための修正を持っている:) あなたが見る、私はUITextViewのテキストは、その左にUIImageViewを避けなければならない非常によく似た何かを、やろうとしました。私のコードは以下の通りであった:

let ticketProfileExclusionPath = UIBezierPath(roundedRect: ticketProfilePicture.frame, cornerRadius: Constants.ProfilePictureExclusionRadius) 
ticketContent.textContainer.exclusionPaths.append(ticketProfileExclusionPath) 

そして、私の結果は非常に良いではありませんでした:

enter image description here

あなたが見ることができるように、問題は、その除外パスとしてticketContentUITextViewに与えられたCGRectに依存していますから、与えられたCGRectがスーパービューのではなく、それ自身のフレームに修正されていると仮定しているからです。

修正は非常に単純であり、時間の夜明け(iOSの2.0)以降のAPIの存在を使用する必要があります:

let exclusionPathFrame = convert(ticketProfilePicture.frame, to: ticketContent).offsetBy(dx: Constants.SystemMargin, dy: Constants.Zero) 

UITextViewUIImageViewのフレームに変換された私たちはここでやっていますしたがって、UITextViewの観点から正しい除外パスを提供します。追加されたオフセットは、私のUITableViewCellのテキストUIViewの3つすべてを整列させるだけです。

convert()は、UIViewの方法です。

enter image description here

あなたが見ることができるように、テキストは現在、非常にうまくticketProfilePictureUIImageView周りを包みます。

これが役に立ちます。

0
You can calculate textview text height with content size. 

let tempTextview = UITextView(frame: CGRect(x: 50, y: 50, width: 120, height: 250)) 
tempTextview.text = "Dynamic Text" 
let height = tempTextview.contentSize.height 

Add you extra top and bottom padding to this height. 

height = height + padding 

if imageview.frame.size.height > height 
{ 
    return imageview.frame.size.height 
} 
else 
{ 
    return height 
} 
+0

これは無視されたイメージビューを考慮しないので、行末付近に余分なスペースが追加されます – havak5

関連する問題