#ios #swift #uilabel #uitextview #swift3
#iOS #swift #uilabel #uitextview #swift3
Вопрос:
Я создаю приложение для чата, в котором каждое сообщение вставляется в строку внутри таблицы. Каждая строка содержит аватар и сообщение. Я хочу установить ширину и высоту UITextArea в соответствии с длиной текста, который нужно поместить внутрь.
Ниже приведен код, который я использовал. Но здесь и высота, и ширина постоянны (200×50)
PS: Я новичок в Swift и ios, и я использую Swift 3. Каждый код, который я получил после поиска, находится в objective-c или swift 2
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("ChatBox1", owner: self, options: nil)?.first as! ChatBox1
let myTextField: UITextView = UITextView(frame: CGRect(x: 30, y: 20, width: 200.00, height: 50.00));
cell.addSubview(myTextField)
myTextField.isScrollEnabled = false
myTextField.isUserInteractionEnabled = false
myTextField.backgroundColor = UIColor.lightGray
myTextField.text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
myTextField.layer.cornerRadius = 5
print(myTextField.intrinsicContentSize)
let image = UIImage(named: "agent")
let imageView = UIImageView(image: image)
imageView.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
cell.addSubview(imageView)
return cell
}
Комментарии:
1. Попробуйте cell.sizeToFit()
2. Взгляните на
boundingRect(with:options:attributes:context:)
, который является методомNSString
. Вы можете использовать этот метод для вычисления размера всей строки, а затем соответствующим образом установитьtextView
а также высоту ячейки3. Попробуйте cell.sizeToFit(), а также попробуйте внутри вашего номера строки ….. TableView.estimatedRowHeight = 44.0 TableView.RowHeight = UITableViewAutomaticDimension. Это решит вашу проблему….
4. Это не имеет никакого отношения к вашему текстовому полю.проверьте мой другой комментарий. это ответ, который вы искали….
5. Внутри вашей функции TableView(TableView: UITableView!, раздел numberOfRowsInSection: Int) -> Int { верните YourArray.count }
Ответ №1:
Эти два метода используются для установки высоты и ширины textview в соответствии с текстом в чате.
Вы можете использовать их. (swift 2.3)
var screenrect = UIScreen.mainScreen().bounds
func GET_WIDTH(textView : UITextView , text : String)-> CGFloat
{
textView.text = text;
let size = textView.bounds.size
let newSizeWidth = textView.sizeThatFits(CGSize(width: CGFloat.max, height: size.height))
// Resize the cell only when cell's size is changed
if size.width != newSizeWidth.width
{
if( newSizeWidth.width > screenrect.width-120 )
{
textView.layer.frame.size.width = screenrect.width-120;
}
else if ( newSizeWidth.width < 40 )
{
textView.layer.frame.size.width = 40
}
else
{
textView.layer.frame.size.width = newSizeWidth.width;
}
}
return textView.layer.frame.size.width 40;
}
func GET_HEIGHT(textView : UITextView , text : String)-> CGFloat
{
textView.text = text;
let size2 = textView.bounds.size
let newSize = textView.sizeThatFits(CGSize(width: size2.width, height: CGFloat.max))
if size2.height != newSize.height
{
if( newSize.height < 40 )
{
textView.layer.frame.size.height = 40
}
else
{
textView.layer.frame.size.height = newSize.height
}
}
return textView.layer.frame.size.height 15;
}
Вы должны вызвать функции textview подобным образом, чтобы установить высоту и ширину.
let textViewRight=UITextView(frame: CGRectMake(0, 4, 40, 40));
textViewRight.layer.frame.size.width = GET_WIDTH(textViewRight, text: currentObject.chat_userMessage)
textViewRight.layer.frame.size.height = GET_HEIGHT(textViewRight, text: currentObject.chat_userMessage)
Ответ №2:
Попробуйте этот код:
Ответ 1:
func tableView(tableView:UITableView!, numberOfRowsInSection section: Int) -> Int {
yourTableViewName.estimatedRowHeight = 44.0 // Standard tableViewCell size
yourTableViewName.rowHeight = UITableViewAutomaticDimension
return yourArrayName.count }
And also put this code inside your Cell for incase...
yourCell.sizeToFit()
Ответ 2:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
Комментарии:
1. Это может быть проблема с макетом. проверьте свои ограничения.
Ответ №3:
в viewDidLoad добавьте это
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
Просто добавьте эти две строки, и ваша проблема будет решена
Ответ №4:
Возьмите ограничение высоты TextView и установите его равным размеру содержимого TextView.
В качестве альтернативы, если вы используете autolayout, вы можете установить для свойства content hugging and compression значение 1000. Это должно расширить вашу ячейку в соответствии с содержимым.