菜鸟教程小白 发表于 2022-12-12 09:30:45

ios - UIScrollView 内的动态 UIStackView


                                            <p><p>由于 iOS7 以来的广泛更新,我想问这个问题,因为我对自动布局和新堆栈 View 的经验有限,我想知道在 Objective-C 中实现以下内容的最佳设计实践是什么(不是 swift然而):</p>

<p> <a href="/image/HXFZP.png" rel="noreferrer noopener nofollow"><img src="/image/HXFZP.png" alt="enter image description here"/></a> </p>

<p>在我看来,有一个容器 ScrollView ,带有一个子容器 UIView。在这个 UIView 中,有许多元素。其中一个元素是一堆 UIView,它们的数量偶尔会有所不同。 </p>

<p>此元素后跟 map 和其他 View 。 </p>

<p>这就是我计划的组织方式:
<a href="/image/SY4mR.png" rel="noreferrer noopener nofollow"><img src="/image/SY4mR.png" alt="enter image description here"/></a> </p>

<p><strong>问题</strong></p>

<ol>
<li>这是正确的做法吗?当我以编程方式删除和添加元素时,如何修改堆栈 View 的高度约束? </li>
<li>如何通过interface builder给UIStackView添加 subview ?当我这样做时, subview 采用包含堆栈 View 的大小。 </li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong> swift4.2</strong></p>

<p>如果你想使用代码而不是 Storyboard,我创建了一个使用自动布局的示例,不需要估计内容的大小。</p>

<p>您只需要添加到堆栈 View 或从中删除并自动修改滚动高度。</p>

<pre><code>import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
      super.viewDidLoad()

      view.addSubview(scrollView)
      scrollView.addSubview(scrollViewContainer)
      scrollViewContainer.addArrangedSubview(redView)
      scrollViewContainer.addArrangedSubview(blueView)
      scrollViewContainer.addArrangedSubview(greenView)

      scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
      scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
      scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
      scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

      scrollViewContainer.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
      scrollViewContainer.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
      scrollViewContainer.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
      scrollViewContainer.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
      // this is important for scrolling
      scrollViewContainer.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
    }

    let scrollView: UIScrollView = {
      let scrollView = UIScrollView()

      scrollView.translatesAutoresizingMaskIntoConstraints = false
      return scrollView
    }()

    let scrollViewContainer: UIStackView = {
      let view = UIStackView()

      view.axis = .vertical
      view.spacing = 10

      view.translatesAutoresizingMaskIntoConstraints = false
      return view
    }()

    let redView: UIView = {
      let view = UIView()
      view.heightAnchor.constraint(equalToConstant: 500).isActive = true
      view.backgroundColor = .red
      return view
    }()

    let blueView: UIView = {
      let view = UIView()
      view.heightAnchor.constraint(equalToConstant: 200).isActive = true
      view.backgroundColor = .blue
      return view
    }()

    let greenView: UIView = {
      let view = UIView()
      view.heightAnchor.constraint(equalToConstant: 1200).isActive = true
      view.backgroundColor = .green
      return view
    }()
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIScrollView 内的动态 UIStackView,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33333943/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33333943/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIScrollView 内的动态 UIStackView