我正在使用UITextView来显示一些内容。在textView下面,我添加了一个UIButton,它可以控制TextView是否显示其部分或全部内容。
理想情况下,当按下按钮时,TextView将展开其高度以适应内容的长度。
我还没有找到一个好的解决方案。我想知道我是否应该使用UIlabel而不是textView。
答案 0 :(得分:2)
你可以这样做:
<强> 1。在故事板中添加UITextView和UIButton。
<强> 2。如果您使用的是Autolayout Constraints,请设置UITextView高度的出口。
第3。在ViewController类中,将outlet设为:
@IBOutlet var txtView:UITextView!
@IBOutlet var btn_Show:UIButton!
@IBOutlet var textView_HeightConstraint:NSLayoutConstraint!
<强> 4。创建一个方法,根据其中的文本为您提供UITextView的高度。
func getRowHeightFromText(strText : String!) -> CGFloat { let textView : UITextView! = UITextView(frame: CGRect(x: self.txtView.frame.origin.x, y: 0, width: self.txtView.frame.size.width, height: 0)) textView.text = strText textView.font = UIFont(name: "Fira Sans", size: 16.0) textView.sizeToFit() var txt_frame : CGRect! = CGRect() txt_frame = textView.frame var size : CGSize! = CGSize() size = txt_frame.size size.height = 50 + txt_frame.size.height return size.height }
<强> 5。点击按钮:
@IBAction func showMore_Button_Clicked(_ sender: UIButton) { if sender.tag == 0 { let height = self.getRowHeightFromText(strText: self.txtView.text) self.textView_HeightConstraint.constant = height self.view.layoutIfNeeded() btn_Show.setTitle("ShowLess", for: .normal) sender.tag = 1 } else { self.textView_HeightConstraint.constant = 116 self.view.layoutIfNeeded() btn_Show.setTitle("ShowMore", for: .normal) sender.tag = 0 } }
<强> 6。如果您没有使用AutoLayoutConstraints,只需单击UIButton即可更改UITextView的Frame(Height)。不需要&#34; textView_HeightConstraint
&#34;
@IBAction func showMore_Button_Clicked(_ sender: UIButton)
{
if sender.tag == 0
{
let height = self.getRowHeightFromText(strText: self.txtView.text)
self.txtView.frame = CGRect(x: self.txtView.frame.origin.x, y: self.txtView.frame.origin.y, width: self.txtView.frame.size.width, height: height)
btn_Show.setTitle("ShowLess", for: .normal)
sender.tag = 1
}
else
{
self.txtView.frame = CGRect(x: self.txtView.frame.origin.x, y: self.txtView.frame.origin.y, width: self.txtView.frame.size.width, height: 116)
btn_Show.setTitle("ShowMore", for: .normal)
sender.tag = 0
}
}