2017-01-25 5 views
0

Я добавил представление в заголовок tableView, состоящий из imageView и textView. Представление изображения выровнено по левому краю в верхнем углу, а текст просматривается над изображением в правой части экрана, как показано ниже.Как правильно изменить текстовое представление с исключениями Патчи внутри заголовка таблицы

references image

TextView может иметь динамический контент и имеет путь исключения устанавливается следующим образом:

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

Я отключил прокрутки для 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 имеет меньше текста, чем высота изображения, размер представления увеличивается.

Пример из трех строк текста: enter image description here

Пример из шести строк текста: enter image description here

примере достаточно текста, чтобы передать ImageView: enter image description here

Кто-нибудь знает, почему это происходит?

+1

Ваши ограничения и ограничения связаны неправильно. –

ответ

1

У меня есть исправление для этого, потому что я просто столкнулся с этой проблемой сам :) Вы видите, что я пытался сделать что-то очень похожее, где UITextView «s текст должен избежать UIImageView слева от нее. Мой код был следующим:

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

И мои результаты были не очень хорошие:

enter image description here

Как вы можете видеть, проблема зависит от CGRect предоставленного ticketContentUITextView в качестве исключения пути , начиная с , последний предполагает, что данный CGRect исправлен в его собственном кадре, а не в его контроле.

Исправление очень прост и требует использования в API присутствует с начала времен (IOS 2,0):

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

Что мы делаем здесь, преобразование кадра в UIImageView «сек до UITextView поэтому система обеспечивает правильный путь исключения с точки зрения UITextView. Добавленное смещение - это просто выровнять все три из моих UITableViewCell's text 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

 Смежные вопросы

  • Нет связанных вопросов^_^