UIImageView 显示图像时如何防止 UIToolbar 调整大小?

Posted

技术标签:

【中文标题】UIImageView 显示图像时如何防止 UIToolbar 调整大小?【英文标题】:How to prevent UIToolbar from getting resized when UIImageView displays an image? 【发布时间】:2018-10-12 01:25:14 【问题描述】:

我正在构建一个允许用户创建模因 (Udacity project: Meme Me) 的应用。

界面由两个UIToolbars(顶部和底部)和一个跨越它们之间空间的UIImageView 组成。其余的 UI 元素与我的问题无关。这是应用程序首次启动时的屏幕截图:

当图像加载到UIImageView 时,两个工具栏都会调整大小并变小,如下所示:

是什么导致工具栏调整大小,更重要的是,如何防止它们调整大小?

【问题讨论】:

如果我的回答解决了您的问题,请记住,您可以通过勾选答案左上角的 √ 将其标记为正确。由于我花了很多时间来写它,我真的很感激! 【参考方案1】:

您的工具栏可能会调整大小,因为除非您对 UI 元素(例如工具栏和UIImageViews)指定约束,否则 XCode 会以自己的方式解释它并向您展示它认为最好的布局。我们通常通过将每个 UI 元素的以下属性显式设置为 false 来解决此问题:

MyUIElement.translatesAutoresizingMaskIntoConstraints = false

然后以编程方式指定元素的约束。请注意,MYUIElement 是您为 UIElement 命名的任何名称。 这告诉 XCode 作为程序员,您希望完全控制 UI 元素在其视图中的位置。

您可以通过编程设置约束来防止工具栏调整大小:

topToolbar.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
bottomToolbar.heightAnchor.constraint(equalToConstant: 50.0).isActive = true

当然,您可以将 topToolbarbottomToolbar 替换为您命名工具栏的任何名称,并将 50.0 替换为适合您用例的任何值。

这称为自动布局。这两行代码应该在设置工具栏后调用(如果您以编程方式创建它们)。

然而,程序化 UI 的概念可能不会包含在初学者 ios 开发课程中,您很可能使用情节提要来构建它,这解释了为什么您的工具栏会失去控制!

如果您使用 Interface Builder(即在您的故事板中)创建了它们,那么您可以使用上面的代码修改它们的高度限制,或者通过单击下面的按钮在 Interface Builder 中调整布局设置:

如果您决定通过上述情节提要设置约束,请注意可能 XCode 会告诉您需要指定更多约束(例如宽度约束),以便工具栏的编译器不会将位置视为“模棱两可”。

【讨论】:

以上是关于UIImageView 显示图像时如何防止 UIToolbar 调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 UIImageView 使用 Autolayout 调整大小

如何在用户配置文件视图控制器上显示从火存储到 UIImageView 的图像?

UIView 中的 UIImageView 并且不显示超出范围的图像部分

UIImageView:如何显示缩放图像?

UIImageView tintColor 设置,无论如何都不对图像应用颜色

图像上的触摸事件,通过使用 UIButton 实现,但与 UIImageView 相比显示延迟