- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 Storyboard ,由一个 UICollectionView
和多个单元格组成,每个单元格的高度各不相同。第一个单元格采用 UICollectionViewDelegateFlowLayout
的高度:
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
.. 但我希望第二个单元格更短。我在单元格内的“主”UIStackView
中放置了两个 UIStackViews
,每个内部 UIStackViews
都有一个或多个标签,例如这个:
cell
--> stackView (master)
--> stackView (1)
--> label
--> stackView (2)
--> label
--> label (etc)
.. 希望 UIStackView
可以使单元格高度动态,但事实并非如此。它像以前一样从 UICollectionViewDelegateFlowLayout
获取高度。
我应该怎么做?
最佳答案
您需要计算 CollectionViewCell
的内容大小并将其返回给 sizeForItemAt
函数。
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
// Create an instance of the `FooCollectionViewCell`, either from nib file or from code.
// Here we assume `FooCollectionViewCell` is created from a FooCollectionViewCell.xib
let cell: FooCollectionViewCell = UINib(nibName: "FooCollectionViewCell", bundle: nil)
.instantiate(withOwner: nil, options: nil)
.first as! FooCollectionViewCell
// Configure the data for your `FooCollectionViewCell`
cell.stackView.addArrangedSubview(/*view1*/)
cell.stackView.addArrangedSubview(/*view2*/)
// Layout the collection view cell
cell.setNeedsLayout()
cell.layoutSubviews()
// Calculate the height of the collection view based on the content
let size = cell.contentView.systemLayoutSizeFitting(
CGSize(width: collectionView.bounds.width, height: 0),
withHorizontalFittingPriority: UILayoutPriorityRequired,
verticalFittingPriority: UILayoutPriorityFittingSizeLevel)
return size
}
这样,您将拥有动态单元格高度 UICollectionView
。
补充说明:
对于 Collection View 单元格的配置,您可以在 FooCollectionViewCell
上创建一个辅助函数 func configure(someData: SomeData)
以便共享代码在 cellForItemAt
函数和 sizeForItemAt
函数之间。
// Configure the data for your `FooCollectionViewCell`
cell.stackView.addArrangedSubview(/*view1*/)
cell.stackView.addArrangedSubview(/*view2*/)
对于这两行代码,似乎只有当 UICollectionViewCell
包含垂直 UIStackView
作为 subview 时才需要(可能是 Apple 的错误)。
// Layout the collection view cell
cell.setNeedsLayout()
cell.layoutSubviews()
关于ios - UICollectionView:使用 UIStackView 的动态单元格高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33965415/
我有一个很大的 CustomView,我在上面放置了一个父 UIStackView 以包含两个 UIStackView。 每个 UIStackView 都设置为包含两个项目,每个项目均等填充。 第一个
我正在尝试使用嵌入式 UIStackViews 来获得如下所示的内容: Label1 ----------------Label2 Label3 -- 所以我在一个水平 UIStackView 中有
前言:我偷看了this post它并没有解决我的问题。这是一个 link to a repo这显示了我遇到的错误。 我有一个 UIViewController 和一个包含嵌套水平 UIStackVie
在上面的屏幕中,您可以看到我正在使用 UIStackView 来垂直填充单选按钮。问题是当我使用 stackV.alignment = .leading 时,我的单选按钮没有利用 UIStackVie
我想问一下 UIStackView() 和 UIStackView(frame: .zero) 初始化程序之间的区别。 我想知道这两者中的哪一个是由 UIStackView() 默认触发的。 @int
问题:图像占用了大部分堆栈,文本缩小了 我尝试更改内容拥抱优先级但没有任何更改! 如何使用 storyboard 在 UIStackview 中做到这一点? 我希望单元格看起来像 Eventbrigh
我正在尝试制作一个比使用 UICollectionView 更容易制作网格的 UIControl 来执行某些小任务。我正在使用 UIStackViews 的 UIStackView。那是垂直堆栈(列)
我有一个嵌套的 UIStackView,当我按下一个按钮时,它就会被实例化。更详细地说,我有一个 UIStackView,它遍历一个充满 CustomUIStackViews 的 NSMutableA
我目前正在尝试制作一个简单的应用程序,该应用程序将根据用户输入显示少量内容。目前,我的屏幕上有一个堆栈 View ,里面有一个 UIView。我试图做到这一点,一旦按下一个按钮,UIView 就会消失
https://spin.atomicobject.com/2017/02/20/uistackview-stacking-child-views/ 我正在按照本教程获取 View 堆叠并使用它们的内
每个 View 都有一个进行渲染的层。令我困惑的是,您无法为堆栈 View 设置圆角半径或边框,但当您隐藏其中一个已排列的 subview 时,其余 subview 会填满堆栈 View 。 此外,A
我正在尝试在堆栈 View 中排列一组按钮。但是,当我使用 for-each 循环来执行此操作时,按钮最终会被一个放在另一个的顶部? var stackView: UIStackView = {
我正在尝试将 UIStackView 添加到我的窗口,但它没有显示。如下所示,我已经成功添加了 UINavigationBar。我还尝试添加各种其他控件,但实际上只出现了另一个 UIView。我已经附
我有一个 UIStackView (stack1),它包含两个排列的 View :一个 UIStackView (stack2) 和一个 UIScrollView (scroll) stack2 有固
我需要在水平 UIStackView 中有 X 个按钮,它位于 UIScrollView 中。要求是按钮应该均匀分布在堆栈 View 中,并且随着按钮数量的增加我应该减少间距以使它们适合屏幕的宽度,但
我有一个 UIScrollView 可以填充所有窗口并且包含一个垂直的 UIStackView 我想在其中添加 UILabels 以填充所有可用宽度. UIStackView 固定在 UIScroll
在使用平移手势移动 UIStackView 中的元素后,我试图获取/保留该元素的句柄。 例如,我试图捕获的元素是按钮标签或文本标签文本。 代码解释... 我正在通过函数 func createButt
我在 Storyboard中定义了一个 UIStackView,第一个按钮的高度设置为 70,其他按钮的高度设置为 45。我收到此自动布局错误: [LayoutConstraints] Unable
问题很简单——我真的很喜欢用 UIStackView 来组织 UI。但是,我在测试应用程序中看不到 UIStackView 边界。当 UI 元素不是预期的时候,我需要花很多时间来调试。在网上搜索,我找
我正在尝试将 UIButtons 动态添加到 UIStackView,但遇到了一些奇怪的行为。由于按钮内的文本也是动态的,因此它应该是多行的(默认情况下不是)。所以我这样设置中断模式: button
我是一名优秀的程序员,十分优秀!