#swift #xcode #uitableview
#swift #xcode #uitableview
Вопрос:
Я пробую различные методы, функции, расширения: вот моя проблема.
Я получаю текстовый ответ от внутреннего API, это одна строка текста, но у него будут HTML-теги для разрывов строк. Таким образом, некоторые длинные строки должны выглядеть как маркеры или несколько абзацев. Также мне придется разобрать URL-ссылки, электронную почту и номера телефонов, поэтому я хочу использовать UITextView
Моя проблема: TextView почти никогда не отображает более нескольких строк, и мне приходится много раз прокручивать вверх и вниз, чтобы загрузить полный текст. и иногда закругленные углы не закруглены. Мне конкретно нужны 3 закругленных угла.
Обычно это просто. Но это серьезно ставит меня в тупик.
Я попытался установить для прокрутки значение false. Я настраивал свои ограничения слишком много раз, чтобы их можно было сосчитать.
Я не хочу умолять, но я рад отправить несколько KitKats всем, кто может помочь!
Вот мой cellForRowAt и мои классы cell
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let message = self.messages[indexPath.row]
let sending = message.from?.id == BotClient.shared.currentUser.id
switch sending {
case true:
// User Cell
let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! UserCell
cell.transform = tableView.transform
cell.messageLabel.text = message.text
return cell
case false:
// Bot Cell
let cell = tableView.dequeueReusableCell(withIdentifier: "BotCell", for: indexPath) as! BotCell
cell.testLabel.text = message.text
cell.testLabel.layoutIfNeeded()
cell.transform = tableView.transform
return cell
}
}
}
// Bot Cell Class
class ReadMoreCell : UITableViewCell, UITextViewDelegate {
@IBOutlet weak var testLabel: EdgeInsetLabel!
override func awakeFromNib() {
super.awakeFromNib()
let bounds: CGRect = testLabel.bounds
let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: ([.topLeft, .topRight, .bottomRight]), cornerRadii: CGSize(width: 15.0, height: 15.0))
let maskLayer = CAShapeLayer()
maskLayer.frame = bounds
maskLayer.path = maskPath.cgPath
testLabel.layer.mask = maskLayer
testLabel.layer.masksToBounds = true
}
override func layoutSubviews() {
super.layoutSubviews()
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
// Класс ячейки пользователя class UserTableViewCell: UITableViewCell {
static let reuseId = "UserCell"
@IBOutlet weak var messageView: UIView!
@IBOutlet weak var messageLabel: EdgeInsetLabel!
override func awakeFromNib() {
super.awakeFromNib()
let bounds: CGRect = messageLabel.bounds
let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: ([.topLeft, .topRight, .bottomLeft]), cornerRadii: CGSize(width: 20.0, height: 20.0))
let maskLayer = CAShapeLayer()
maskLayer.frame = bounds
maskLayer.path = maskPath.cgPath
messageLabel.layer.mask = maskLayer
messageLabel.layer.masksToBounds = true
messageLabel.layoutIfNeeded()
}
override func layoutSubviews() {
super.layoutSubviews()
// Do I put UI Configurations like border colors, and round corner stuff here ??
}
}
изображение: предполагается, что серая ячейка занимает всю длину экрана
Комментарии:
1. Помогает ли установка приоритета устойчивости к сжатию содержимого по вертикали на 1000 без прокрутки?
2. Правильно ли вы рассчитываете высоту ячейки / строки с текстом сообщения?
3. Я только что попробовал приоритет сопротивления 1000 и без прокрутки. По-прежнему TextView отключен. У меня есть ограничения в виде: нижняя часть UITextView до нижней части ячейки, верхняя часть UITextView до верхней части ячейки. Левое поле 16, а правое поле 175.
4. Использовать ли мне heightForRowAt? Я попробовал автоматическое измерение там и ничего.
5. Я действительно борюсь с этим. = (