我想创建一个包含5个按钮的水平UIStackView。每个按钮可以处于两种状态之一:选择或未选择。取消选择按钮时,它将显示为仅包含图像的正方形。当一个按钮被选中时,它会同时显示一个图像和一个标签,并将其转换为一个比其他未选中按钮更长的矩形。
当视图初始设置时,第一个按钮应处于选中状态。轻敲任何其他按钮应导致先前选择的按钮收缩回正方形,而新轻敲的按钮扩展以显示标签。如何使用UIKit实现此行为?
下面你可以看到一个实际的图像,直观地解释了我上面描述的内容:
我想用纽扣。changesSelectionAsPrimaryAction = true在iOS 15中引入-以避免创建UIButton的子类。不幸的是,按钮的外观将自动更新为所选状态,其中包括不同的背景颜色和复选标记图像,所以它可能不适合这种情况。我想知道是否有可能在不创建自定义UIButton类的情况下实现这种设计。
1条答案
按热度按时间0tdrvxhp1#
使用Swift/UIKit(这不适用于SwiftUI)。..
我们可以利用
UIStackView
在显示和隐藏排列的子视图时自动调整大小。我们将从
UIView
子类开始(而不是按钮),它将包含:当我们想要“展开”这个视图时,我们设置
label.isHidden = false
,而要“折叠”它,我们设置label.isHidden = true
。如果我们有五个自定义视图作为“父”水平堆栈视图的子视图,所有的大小调整都将是自动的。
因此,我们的自定义“图像和标签”视图:
接下来,一个
UIView
子类(我们称之为WeatherTabView
),其中:ImageLabelView
的水平堆栈视图类WeatherTabView:UIView {
}
和一个简单的视图控制器来演示:
运行时看起来像这样:
注意:这是*示例代码!********************************************************************************************************************************************************************************************************************************************************..