【问题标题】:Xcode - Swift, UITextView won't display on UIStackViewXcode - Swift,UITextView 不会显示在 UIStackView 上
【发布时间】:2016-08-22 04:54:38
【问题描述】:

我知道已经有类似的问题了,但是他的解决方案并没有解决我的问题。

我所拥有的是,我使用情节提要创建了一个视图控制器,然后将一个子堆栈视图放在上面。

使用 IBOutlet,我将 UIStackView 链接到自定义视图控制器类。

一切都正确链接在一起,这不是问题(我已经确定)。

我的问题是我似乎无法在 UIStackView 中显示 UITextView。

这是我的代码(在视图控制器的一个函数中):

let textView = UITextView()
textView.text = "test"
stackView.addArrangedSubview(textView) //stackView is the IBOutlet

我已经能够使用

使 UITextView 出现在父视图上
let pos = CGRect(x: 100, y: 100, width: 200, height: 200)
let textView = UITextField(frame: pos)
textView.text = "test"
//stackView.addArrangedSubview(textView)
self.view.addSubview(textView)

不,用stackView取消注释行,然后注释掉self.view.addSubview是行不通的

但是,如果我使用 UITextField,我会设法在 UITabView 中显示一些内容。这真是太烦人了……

有什么建议吗?

【问题讨论】:

    标签: ios swift uitextview uistackview


    【解决方案1】:

    您需要一个用于UITextView 的框架。并使用addSubview 而不是addArrangedSubview

    我使用了以下内容,文本视图在堆栈视图中显示得很好:

    let textView = UITextView(frame: CGRectMake(0, 0, 100, 100))
    textView.text = "test"
    textView.backgroundColor = UIColor.redColor()
    stackView.addSubview(textView)
    

    【讨论】:

    • 非常感谢。这对我有用。不过这很奇怪,我读过的一个在线教程说避免使用 stackview 的 addSubview 并使用 addArrangedSubview。这似乎是正确的解决方案。编辑:现在似乎有一个新问题, UITextView 不会编辑。是的,我添加了行 textView.editable = true
    • Edit2:这似乎也完全破坏了 UIStackView 的功能,因为它应该在添加时自动堆叠新元素。如果您使用此方法添加第二个 UITextView,它们会相互叠加。
    • 它们相互叠加,因为它们具有相同的坐标(x:0,y:0)(如果您设置相同的框架)。您可以尝试仅设置文本视图的宽度和高度,并查看堆栈视图是否自动排列它。我尝试了addArangedSubview,但没有出现文本视图,所以这就是我建议的原因。如果您能具体告诉我们您想要达到的目标,人们可以更准确地帮助您。您想以编程方式在堆栈视图中添加更多文本视图吗?我会研究我的代码,看看我能如何帮助你。
    【解决方案2】:

    您不应将手动框架设置与 AutoLayout 混合使用(UIStackView 内部使用的内容)。 @Lawrence413 的回答是错误的,错误地使用了UIStackView

    以下是描述UIStackView 以及如何使用它的博客文章: http://www.raizlabs.com/dev/2016/04/uistackview/

    记下UIStackViewDistribution 以及如何使用它来调整arrangedSubviews 的大小。

    【讨论】:

      【解决方案3】:

      堆栈视图不知道文本视图的大小,因为默认情况下它是可滚动的。您需要禁用滚动:

      textView.isScrollEnabled = false
      

      【讨论】:

      • 这是使用自动布局的最佳答案。
      • 这应该是公认的答案。这正是我的问题,这一班轮马上就修好了。
      • 嘿,我仍然有一点问题,即 textview 高度是根据分配给它的文本管理的,但我想根据 stackview 的底部锚定约束显示该高度。那么如何管理呢?
      • @puja:我不确定我是否理解你的问题,但听起来你可能想看看设置 stackview 的分布属性。
      • @MauricioChirino 如果您需要滚动行为,则不需要,在这种情况下,Medmind 的答案是更好的选择(例如,明确设置定位约束)。
      【解决方案4】:

      禁用滚动对我不起作用,但使用高度约束设置定义的高度对我有用。我没有使用子视图——在我的情况下,只需要直接在 UITextView 上的高度约束。

      【讨论】:

        【解决方案5】:

        您必须从文本视图向堆栈视图添加 0 leftright 的约束。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-23
          • 1970-01-01
          • 1970-01-01
          • 2016-07-19
          • 2016-09-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多