是否可以在运行时使用 AutoLayout 根据屏幕高度或屏幕宽度中的最大值来制作 1:1 的纵横比?
Posted
技术标签:
【中文标题】是否可以在运行时使用 AutoLayout 根据屏幕高度或屏幕宽度中的最大值来制作 1:1 的纵横比?【英文标题】:Is it possible to use AutoLayout to make an aspect ratio of 1:1 based on the largest of either Screen Height or Screen width, at runtime? 【发布时间】:2019-08-27 04:53:37 【问题描述】:我对特征和约束感到非常困惑。
我的视图需要以 1:1 的比例显示,并且它的大小需要取决于屏幕宽度或屏幕高度中的较大者、运行时以及所有设备方向。
最重要的是,我需要将它从屏幕中心向下移动,移动量是在运行时根据方向和 iPhone 与 iPad 计算得出的。
这是否可能,或者最好在代码中完成所有这些并从此视图中删除所有 AutoLayout 约束?
我读过这个:Aspect ratio constraint relative to the screen width
还有这个:https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.html
但我似乎仍然无法让它做我想做的事。
有人可以澄清我需要做什么吗?
谢谢
【问题讨论】:
将高度设置为等于宽度,并将高度约束的常量更改为layoutSubviews()
中的最小值(高度,宽度)。
这是个好主意,但您的意思是 max(height, width) 因为它需要调整为两者中较大的那个吗?
那么视图不会在屏幕之外吗?
部分是的,但这就是我想要的。
您应该创建一次约束,然后在需要时更改该约束的常量。
【参考方案1】:
您需要至少将这 2 个约束添加到情节提要中的 UIView。 第一个将用于纵横比,第二个将用于 UIView 的宽度,具有一个常数值。 您将在名为 widthConstraint 的 UIViewController 类中添加第二个约束的出口 在委托函数 ViewWillAppear() 中,您将添加计算最大边的代码,并将该值添加到约束常量。
UIView.animate(withDuration: 0.0)
let largestOfScreenSide = max(UIScreen.main.bounds.width, UIScreen.main.bounds.height)
self.widthConstraint.constant = largestOfScreenSide
self.view.layoutIfNeeded()
【讨论】:
以上是关于是否可以在运行时使用 AutoLayout 根据屏幕高度或屏幕宽度中的最大值来制作 1:1 的纵横比?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Autolayout 在 UITableView 中异步加载图像
window.navigator.standalone 检测iOS WebApp是否运行在全屏模式
屏幕适配/autoLayout autoresizingMask