【发布时间】:2021-03-21 16:41:09
【问题描述】:
背景信息 我正在创建一个同意/问题表应用程序。此表格将有几个不同的问题,文本长度不同。 1 行最多 5 行,具体取决于设备。
这是我到目前为止所做的 我创建了一个带有 XIB 文件的自定义 UIView 类,我在其中添加了一个锚定到顶部的标签(行设置为 0 = 该标签的多行)。此标签将添加一个短文本或长文本。
在标签下面我有一个是/否按钮,就像单选组一样,在下面我将有一个默认隐藏的 UIText 字段,该字段仅在某些问题上可见,并且只有在用户选择“是”时才可见
问题将被添加到位于 UIScrollView 顶部的垂直 UIStackview
myQuestionView = MyQuestionView(preDefinedAnswer: false, preDefinedAnswerText: nil)
myQuestionView?.questionLabel.text = "Lorem ipsum dolor sit amet, consectetur adipiscing ?"
myQuestionView?.shouldShowAnswerTextfield = true
myQuestionView?.heightAnchor.constraint(equalToConstant: 120).isActive = true
myStackView.addArrangedSubview(myQuestionView!)
问题 正如您在上面的代码中看到的,我将高度约束设置为 120,如果问题只有一行并且用户不选择是(那么视图应该增长并显示 answertextfield),这看起来没问题。通常我可能会创建一个高度约束插座并尝试计算 UIView 类中的高度,但我无法做到。
问题 如何根据内容动态设置自定义 UIView 类的高度并让 stackview 相应增长?我希望当我实例化它时高度是正确的,并且如果用户单击是(以显示 UITextfield)则增长。
感谢您的帮助。
UIView 类
import UIKit
class MyQuestionView: UIView {
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var answerTextfield: UITextField!
@IBOutlet weak var jaButton: UIButton!
@IBOutlet weak var neiButton: UIButton!
@IBInspectable var height: CGFloat = 300.0
@IBOutlet weak var viewHeight: NSLayoutConstraint!
var shouldShowAnswerTextfield : Bool?
var answerText : String?
var didAnswerYes : Bool?
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
init(preDefinedAnswer:Bool?, preDefinedAnswerText:String?)
{
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 200) )
didAnswerYes = preDefinedAnswer
answerText = preDefinedAnswerText
commonInit()
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
setup()
print("init")
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
setup()
print("Init?")
}
func commonInit(){
let viewFromXib = Bundle.main.loadNibNamed("MyQuestionView", owner: self, options: nil)![0] as! UIView
viewFromXib.frame = self.bounds
addSubview(viewFromXib)
}
func setup()
{
answerTextfield.isHidden = true
if(didAnswerYes != nil)
{
print("Setup \(didAnswerYes)")
setAnswer(didAnswerYes!)
if(answerText != nil)
{
answerTextfield.text = answerText
if(didAnswerYes!)
{
answerTextfield.isHidden = false
}
}
}
//sett constraints
//self.heightAnchor.constraint(equalToConstant: 320).isActive = true
//self.sizeToFit()
//self.layoutIfNeeded()
}
【问题讨论】:
标签: ios swift uiview uistackview