从 UIStackView 中缺少的代码添加的 UITextView

Posted

技术标签:

【中文标题】从 UIStackView 中缺少的代码添加的 UITextView【英文标题】:UITextView added from code missing in UIStackView 【发布时间】:2015-11-03 11:04:18 【问题描述】:

我正在尝试以编程方式将UITextView 添加到UIStackView,但它没有出现在屏幕上。

当我签入 Debug View Hierarchy 时,它位于视图层次结构中,并且有一些约束,但不会显示在输出的视图中。

这是我的代码:

let stackView = UIStackView()

let textView = UITextView()
let button = UIButton()

stackView.axis = .Horizontal
stackView.spacing = 20
stackView.distribution = UIStackViewDistribution.Fill

button.setImage(UIImage(named:"image1"), forState: .Normal)
button.setImage(UIImage(named:"image2"), forState: .Selected)


textView.textAlignment = NSTextAlignment.Left
textView.textColor = UIColor.blackColor()
textView.editable = true
textView.text = ""

stackView.addArrangedSubview(textView)
stackView.addArrangedSubview(button)

按钮添加得很好。但我找不到正确显示 TextView 的方法!尝试添加如下所示的宽度/高度约束,但效果不佳或效果不佳(取决于变体):

let widthConstraint = NSLayoutConstraint(item: textView,
                 attribute: NSLayoutAttribute.Width,
                 relatedBy: NSLayoutRelation.Equal,
                 toItem: stackView,
                 attribute: NSLayoutAttribute.Width,
                 multiplier: 1,
                 constant: 0)
stackView.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: textView, attribute:   NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: stackView, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)
stackView.addConstraint(heightConstraint)

但是,当我添加 UITextField,而不是 UITextView 时,它可以正常工作,没有任何限制。

【问题讨论】:

您是否尝试将 textView 的背景颜色设置为白色?通常背景颜色设置为clearColor。 是的。不幸的是,背景不是问题。请参阅下面的解决方案 【参考方案1】:

UITextViewUIScrollView 的子类,因此它的大小在UIStackVIew 内部是不明确的。为了使大小明确,您可以根据其内容调整自身大小 - 即,使其不可滚动。 那么简单的解决方案是:

textView.isScrollEnabled = false

(Swift 3.0 语法)

【讨论】:

【参考方案2】:

我知道缺少什么。我不能使用指定的初始值设定项,因为我不知道要在其中创建它的类中文本视图的帧大小。

但这有帮助 - 在上面的代码中的 stackView.distribution 之后添加这一行:

 self.alignment = UIStackViewAlignment.Fill

【讨论】:

【参考方案3】:

尝试使用

init(frame frame: CGRect,textContainer textContainer: NSTextContainer?)

因为它是 UITextView 的指定初始化程序。

【讨论】:

以上是关于从 UIStackView 中缺少的代码添加的 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

从后台线程添加到 UITableView 中的 UIStackView

以编程方式清空 UIStackView

如何通过代码在方向更改时添加对 UIStackView.Axis 的更改?

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView

从 UIStackView 获取 View 的索引

如何在 UIScrollView 中添加 UIStackView