【问题标题】:How can I dynamically add/remove a button in a UIView and reposition the buttons below it and vertically resize the view?如何在 UIView 中动态添加/删除按钮并重新定位其下方的按钮并垂直调整视图大小?
【发布时间】:2023-04-05 06:26:01
【问题描述】:

我有一个在笔尖中定义的 UIView,我需要能够在该视图中显示/隐藏一个中间按钮。当我显示按钮时,我需要重新定位它下方的两个底部按钮,并让视图更高以便为所有内容腾出空间。当我隐藏中间按钮时,我需要向上移动两个底部按钮并垂直调整视图大小以使其不那么高。我不需要对其中的任何内容进行动画处理,因为当视图对用户可见时,这些更改将永远不会发生。

我是 iOS 新手,习惯使用 Autolayout,但在这种情况下我不能使用 Autolayout 来自动处理这个问题,所以我目前的方法是硬编码两个底部按钮的框架位置和尺寸对于两种不同情况中的每一种。我还在为视图本身硬编码两种不同的帧大小。在 viewDidLoad 中,我确定是否需要显示/隐藏中间按钮并适当地设置视图和底部按钮的框架。这可行,但如果感觉很hacky。我应该这样做有更好的方法吗?

提前感谢您的智慧!

【问题讨论】:

  • 如果没有自动布局,您只能更改帧。
  • 你的方法很常见。手动设置视图的原点和大小没有什么不好的。事实上,我们这些不使用界面生成器的人(我没有)手动设置它们。

标签: ios iphone objective-c


【解决方案1】:

您无需在 viewDidLoad 中硬编码帧大小。您唯一应该注意的是确定是否需要显示中间按钮。在您分配 UIButtons 的实现文件中,检查是否必须显示中间按钮,如果是,则分配它,如果不是,则不要。两个按钮的框架和视图应该包含一个可以相应地设置/调整它们的因素。

您基本上是以编程方式管理自动布局。如果您甚至不被允许这样做,那么您最终会做的任何其他事情都几乎是一种黑客行为。

【讨论】:

  • 谢谢,user2099176,所以如果我理解正确,你是说不要硬编码帧值,而是在我显示/隐藏中间按钮后计算它们,在 layoutSubviews 中?与包含视图的框架相同?
  • 基本上是的。我建议不要再次计算和设置两个按钮的框架,只需将它们的框架设置为自动选择正确位置(再次自动布局)。虽然,仅仅隐藏中间按钮是行不通的,因为其他两个仍然会读取它的框架。您要么必须将框架设置为 CGRectZero,要么完全不分配中间按钮。必须调整包含视图的大小,因为在渲染所有子视图之前您无法获得它的大小。
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2020-08-23
  • 1970-01-01
相关资源
最近更新 更多