2017-01-25 44 views
0

我已經添加了一個視圖到我的tableView頭由一個imageView和一個textView組成。圖像視圖在頂部角落左對齊,並且文本視圖在圖像視圖上延伸到屏幕的右側,如下所示。如何正確調整textview與表頭視圖內的exclusionPaths的大小

references image

TextView的可具有動態內容,並具有設定爲排除路徑如下:

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

我已禁用滾動的TextView的,並且已經設置的標題視圖內的以下約束條件:

的TextView:左 - 8像素,右 - 8像素,頂部 - 0像素,底部 - 8像素

ImageView的:左 - 8像素,寬 - 100像素,高度100像素,頂部 - 8像素,底部 - 大於或等於8像素

我加入這個代碼我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的文字少於圖像的高度,則視圖的大小會增加。

的三行文字

例子: enter image description here

例六行文字:足夠的文本的 enter image description here

例通過ImageView的: 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) 

我們在這裏所做的是UIImageView的幀轉換爲UITextView的座標系統,因此從UITextView的角度提供了正確的排除路徑。增加的偏移量僅僅是對齊我的所有三個UITableViewCell的文本UIView s。

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

相關問題