• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - UIScrollView 内的动态 UIStackView

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:30:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

enter image description here

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

此元素后跟 map 和其他 View 。

这就是我计划的组织方式: enter image description here

问题

  1. 这是正确的做法吗?当我以编程方式删除和添加元素时,如何修改堆栈 View 的高度约束?
  2. 如何通过interface builder给UIStackView添加 subview ?当我这样做时, subview 采用包含堆栈 View 的大小。



Best Answer-推荐答案


swift 4.2

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

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

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
    }()
}

关于ios - UIScrollView 内的动态 UIStackView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333943/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap