【问题标题】:UICollectionView width programatically conflicting with storyboard initializationUICollectionView 宽度以编程方式与情节提要初始化冲突
【发布时间】:2016-08-08 23:50:47
【问题描述】:

我通过情节提要创建了一个 UICollectionView 并将其临时定位在视图中;但是,我想在启动时以编程方式覆盖位置,而不是使用情节提要配置。

我认为viewDidLoad() 是进行此更改的正确位置吗?

Swift 2 代码:

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell")
    collectionView.backgroundColor = UIColor(white:1, alpha:0.0)

    // Doesn't stretch the width to the device's width on launch. :-(
    collectionView.frame.size = CGSize(width: UIScreen.mainScreen().bounds.width, height: 200)        
}

【问题讨论】:

  • 你在使用自动布局吗?您是否从界面构建器中设置了故事板手段的约束?
  • 是的,我已经从界面生成器中设置了约束。除了转到情节提要上的 UICollectionView 对象并清除约束之外,不确定如何重置它们,但这无济于事。它不会以编程方式更改宽度。

标签: ios swift uicollectionview width viewdidload


【解决方案1】:

如果您正在设置约束,然后想要更改heightwidth,那么您应该采用该高度或宽度的出口并增加它的恒定值。只需 ctrl+从宽度约束拖动到类并制作 outlate,然后在 viewdidload 中增加该 outlate 的 contant 属性。

例如,

@IBOutlet weak var heightConstraint: NSLayoutConstraint!

self.heightConstraint.constant = 200

第二件事,如果你想让你的 collectionview 的高度与设备相等,那么就不需要以编程方式设置。如果您设置了适当的约束,自动布局管理它。所以重点是在任何地方使用自动布局或根本不使用。不要混合两个自动布局,然后以编程方式设置框架。

希望这会有所帮助:)

【讨论】:

  • 有趣的解决方法。我现在正在尝试,但我不确定我在按 CTRL+从 XIB 故事板中完全拖动什么。我是先选择 UICollectionView 的对象吗?
  • 不,你需要在storyboard中选择必须为红色的约束线,然后ctrl+拖动到代码中
  • 只需选择约束和控制+从它拖动到类。在您的班级旁边保持助理编辑打开。我正在上传图片,所以你会有更好的主意。
  • 检查答案现在我已经上传了图片。 :)
  • 优秀。在看到您更新的答案之前,我还找到了另一种解决方法:在func numberOfSectionsInCollectionView 下插入我在viewDidLoad() 下的行。从情节提要中覆盖初始配置似乎可以解决问题。希望这些解决方法可以帮助那里的人。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-06-08
  • 2010-12-28
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2012-10-13
相关资源
最近更新 更多