首页 > 解决方案 > Swift - UIScrollView 内的 UICollectionView - 自动布局

问题描述

我有一个滚动视图,它有一个containerView,我在上面放置了多个 UI 组件,例如标签、按钮等。

        /* START SCROLL VIEW */
        scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(scrollView)
        
        scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: frame.width * (22 / IPHONE8_SCREEN_WIDTH)).isActive = true
        scrollView.widthAnchor.constraint(equalToConstant: frame.width * (331 / IPHONE8_SCREEN_WIDTH)).isActive = true
        scrollView.topAnchor.constraint(equalTo:self.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        /* END SCROLL VIEW */

        /* START CONTAINER VIEW */
        containerView = UIView()
        containerView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(containerView)
        
        containerView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor).isActive = true
        containerView.widthAnchor.constraint(equalTo: self.scrollView.widthAnchor).isActive = true
        containerView.topAnchor.constraint(equalTo: self.scrollView.topAnchor).isActive = true
        containerView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor).isActive = true
        containerView.heightAnchor.constraint(equalTo: self.heightAnchor).priority = .defaultLow
        containerView.widthAnchor.constraint(equalTo: self.widthAnchor).priority = .defaultLow
        containerView.layer.borderColor = UIColor.black.cgColor
        containerView.layer.borderWidth = 2
        /* END CONTAINER VIEW */

        ...
        /* START INVITED USERS COLLECTION VIEW */
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        inviteUsersCollectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        
        inviteUsersCollectionView.translatesAutoresizingMaskIntoConstraints = false
        containerView.addSubview(inviteUsersCollectionView)

        inviteUsersCollectionView.delegate = self
        inviteUsersCollectionView.dataSource = self
        inviteUsersCollectionView.register(InviteUsersCollectionViewCell.self, forCellWithReuseIdentifier: InviteUsersCollectionViewCell.reuseIdentifier)
        inviteUsersCollectionView.backgroundColor = UIColor.red
        inviteUsersCollectionView.layer.borderWidth = 2
        inviteUsersCollectionView.layer.borderColor = UIColor.red.cgColor
        
        inviteUsersCollectionView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: frame.width * (34 / IPHONE8_SCREEN_WIDTH)).isActive = true
        inviteUsersCollectionView.widthAnchor.constraint(equalToConstant: frame.width * (309 / IPHONE8_SCREEN_WIDTH)).isActive = true
        inviteUsersCollectionView.topAnchor.constraint(equalTo: inviteUsersLabel.bottomAnchor, constant: frame.height * (27 / IPHONE8_SCREEN_HEIGHT)).isActive = true
        inviteUsersCollectionView.bottomAnchor.constraint(equalTo:containerView.bottomAnchor, constant: -95).isActive = true
        /* END INVITED USERS COLLECTION VIEW */
}

我的containerView中的最后一个子视图是UICollectionView。我可以看到底部有一个空白区域,但是没有显示inviteUsersCollectionView 。

我需要改变什么?

标签: swiftuicollectionviewuiscrollviewautolayout

解决方案


想办法。关于我的收藏视图的约束,缺少一行

  inviteUsersCollectionView.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true
    inviteUsersCollectionView.widthAnchor.constraint(equalToConstant: frame.width * (309 / IPHONE8_SCREEN_WIDTH)).isActive = true
    inviteUsersCollectionView.topAnchor.constraint(equalTo: inviteUsersLabel.bottomAnchor, constant: frame.height * (27 / IPHONE8_SCREEN_HEIGHT)).isActive = true
    inviteUsersCollectionView.heightAnchor.constraint(equalToConstant: 95).isActive = true // was missing
    inviteUsersCollectionView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -5).isActive = true

未设置heightAnchor 。

inviteUsersCollectionView.heightAnchor.constraint(equalToConstant: 95).isActive = true

推荐阅读