iOS:在故事板中将子类从 UIView 更改为 UIScrollView

Posted

技术标签:

【中文标题】iOS:在故事板中将子类从 UIView 更改为 UIScrollView【英文标题】:iOS: Changing subclass from UIView to UIScrollView in a storyboard 【发布时间】:2012-04-18 14:11:15 【问题描述】:

我创建了一个基于故事板的项目。在视图控制器的视图之一中,需要放置一些额外的元素,这会导致视图高度增加,这样视图现在必须是可滚动的。是否可以在情节提要中简单地将 UIView 的类类型更改为 UIScrollView ?它真的会将*** UIView 转换为 UIScrollView 吗?只是寻找一种快速简便的方法,无需太多更改。

谢谢

【问题讨论】:

【参考方案1】:

您可以将storyboard作为xml源代码文件打开,找到视图对象并将其替换为滚动视图。在 Xcode 中右键单击 .storyboard 文件并选择 Open As → Source Code。然后搜索场景的 xml sn-p(例如,Cmd+F 并键入控制器名称)。顶视图对象将如下所示:

<view key="view" contentMode="scaleToFill" id="Jjm-HD-A8W">
  ...
  (suviews and constraints)
  ...
</view>

view 元素更改为scrollView(不要忘记结束标签):

<scrollView key="view" contentMode="scaleToFill" id="Jjm-HD-A8W">
  ...
  (suviews and constraints)
  ...
</scrollView>

然后使用界面生成器打开.storyboard。您的视图现在变成了滚动视图。

此方法有两个优点:您不会失去任何约束,并且您可以在属性检查器中看到所有滚动视图特定的属性。

【讨论】:

太棒了!这么聪明的小主意!您会认为情节提要在 UI 中有一种简单的方法来执行此操作。在代码中,我们只需将UIView 更改为UIScrollView!知道这个技巧是惊人的,ty【参考方案2】:

您必须将UIView 类型更改为UIScrollView(身份检查器)并在控制器viewDidLoad 方法中通过将视图转换为UIScrollView 来分配视图contentSize

[(UIScrollView *)self.view setContentSize:CGSizeMake(320, 700)];

【讨论】:

UIScrollView 属性在属性检查器中不可见。【参考方案3】:

实际上有一个更好的方法来做到这一点。

    在 StoryBoard 中切换打开 UIView 并将其中的任何内容剪切到剪贴板。 删除UIView。 将UIScrollView 对象插入您的故事板。 从剪贴板粘贴到这个新对象中。

此方法将保留您为视图内的事物配置的所有委托和 IBOutlet 设置。

【讨论】:

如果你愿意让它稍微凌乱一些,你也可以在UIView 中添加UIScrollView。这也有效。 尽管打破了限制【参考方案4】:

更简单的方法是只使用滚动视图并将 contentsize 设置为与框架相同的大小 - 因此没有可滚动区域。例如

scrollview.contentsize = CGSizeMake(320,480);

然后,当您需要放大视图时,只需根据需要进行更新。您需要确保关闭反弹功能,否则您仍然可以在滚动视图中拖动。

【讨论】:

以上是关于iOS:在故事板中将子类从 UIView 更改为 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

iOS:自动布局的问题。模拟器结果更改为故事板更改

如何在导航控制器中将过渡动画从底部更改为顶部?

UIPageControl 自定义类 - 发现 nil 将图像更改为点

在哪里可以将我的应用程序使用的窗口从 UIWindow 更改为我自己的带有情节提要的子类“MyWindow”?

UIView 子类:drawRect 未调用

iOS 通过故事板将 UIView 锁定在导航栏下方和 UITableView 上方