ios – 视图水平和垂直模糊,布局复杂

ios – 视图水平和垂直模糊,布局复杂,第1张

概述我的故事板上有一个UIViewController,它有两个水平左右的子视图.我添加了约束来将前沿和后沿修复为常量(20分),并添加另一个约束来保持宽度相等.如果我假设以下内容,应该可以计算每个子视图的宽度需要: >子视图不重叠 >目前没有其他观点(至少水平) >屏幕的宽度(超视图)是已知的 但是,XCode给了我一个警告,我的观点是横向模糊的.我猜这意味着XCode没有做出这些假设之一,但它是哪 我的故事板上有一个UIVIEwController,它有两个水平左右的子视图.我添加了约束来将前沿和后沿修复为常量(20分),并添加另一个约束来保持宽度相等.如果我假设以下内容,应该可以计算每个子视图的宽度需要:

>子视图不重叠
>目前没有其他观点(至少水平)
>屏幕的宽度(超视图)是已知的

但是,XCode给了我一个警告,我的观点是横向模糊的.我猜这意味着XCode没有做出这些假设之一,但它是哪一个?有没有办法让我指示XCode做出这个假设?

编辑:好的,玩了一下并得到警告消失,但看起来它没有做出第一个假设 – 它只是将每个子视图的宽度设置为supervIEw.wIDth – 40,并愉快地将一个视图埋在另一个视图之下.所以问题是如何阻止它们重叠?

编辑2:好的,我的实际屏幕比我的简单示例复杂得多.这是我得到的:

所以在这个设置中我有4个垂直和水平交错的视图.我希望蓝色,红色和紫色的视图都是相同的subvIEw.frame.size.wIDth = supervIEw.wIDth – 60.蓝色和紫色在左列中排列,红色在右列中单独排列,以及所有间隙(两列之间以及每列之间及其最近边缘)均为常数(20 pts).这三个表有一个可变的高度,我将按照James’s answer here中的描述以编程方式设置.底部是一个粉红色的视图,它拉伸屏幕的宽度(减去间隙),并且位于紫色或低于20的常数处.红色视图,以较低者为准(我试图通过给每个视图赋予一个> = 20的间距约束,我希望它会为其中一个选择正好20个).由于所有高度都是动态的,并且可能不一定同时适合屏幕,因此我将他们的supervIEw设置为UIScrollVIEw而不是普通的UIVIEw.

完成所有 *** 作后,我仍然会收到警告,我的所有4个视图都是水平模糊的,并且粉红色条是垂直模糊的.我认为它很难实现应该接下来的东西,这就是为什么它认为它是横向模糊的.而且我认为不会选择将粉红色的条纹放在紫色或红色视图下方20个点以下,这就是为什么它认为它是垂直模糊的.任何人都可以确认或否认这些怀疑吗?或建议一个方法呢?当我最后运行它时,我得到了这个(我将滚动视图的背景变为黄色,你在故事板截图中无法分辨):

解决方法 垂直模糊

好吧,我想我已经解决了垂直模糊的部分.我在粉红色和紫色视图之间添加了两个垂直约束,在粉红色和红色视图之间添加了两个垂直约束.对于每对,第一个约束是它们之间的间距必须> 20分,它有1000个优先权.第二个约束是间距= 20 pts,但它只有800优先级.

例如,如果紫色视图的底部最终低于红色视图的底部(就像在我的第一个屏幕截图中那样),Xcode应该尝试设置粉红色和红色视图之间的垂直距离= 20,但它将意识到与紫色和粉红色之间的空间> = 20的条件冲突.由于> =约束具有更高的优先级,因此将忽略=约束.现在,当Xcode查看紫色和粉红色视图之间的间距= 20的约束时,它会根据约束检查粉红色和红色必须至少相隔20个.因为红色视图的底部高于在紫色视图的底部,红色和粉红色之间的> = 20约束仍然通过.

所以TL; DR,您可以设置一个视图,使其在多个视图中最极端的给定值(x)处有一个间距,方法是给它一个带有1000优先级的> = x约束,并用&lt赋予它一个= x约束;您正在考虑的每个视图的1000优先级 – 我的垂直模糊问题已经解决.我还没有针对所有4个视图的水平模糊度的解决方案.

水平模糊

好的,我现在也修复了水平模糊的部分.它归结为滚动视图(以及表视图)中的约束与其他任何类型的视图的工作方式不同.这是一步一步的样子.

>放置UIScrollVIEw
>将UIVIEw放入UIScrollVIEw中,作为该滚动视图的“contentVIEw”
>添加约束以将contentVIEw固定到滚动视图的所有4个角并固定它的宽度和高度(因此在contentVIEw和它的supervIEw之间有6个约束 – 比平时多2个).请注意,宽度和高度可以固定为比正常屏幕大小大得多的东西,这可能是您开始使用滚动视图的原因.
>在UIScrollVIEw中添加你想要的所有其他视图(UIbuttons,UILabels等等 – 我将从这里开始假设UILabel所以我不必输入那么多,但是任何类型的UIVIEw子类都可以工作)作为contentVIEw的子视图,不直接作为UIScrollVIEw的子视图

通过这种设置,给予超级视图约束的UILabel将约束到具有已定义大小的contentVIEw,因此没有任何歧义.

或者,如果要修复UILabel的大小(或根据应用程序的功能动态计算它们),并让contentVIEw展开以保存它们:

>放置UIScrollVIEw
>将UIVIEw放入UIScrollVIEw中,作为该滚动视图的“contentVIEw”
>添加约束以将contentVIEw固定到滚动视图的所有4个角并将其固定为宽度和高度
>为contentVIEw上的宽度约束创建一个出口(假设我们将其命名为contentVIEwWIDthConstraint)
>放置UILabels
>修复UILabels的大小
>为UILabels的宽度约束创建一个出口

然后在vIEwWillLayoutSubvIEws的代码中

>将所有UILabel的宽度和它们之间的任何间隙加起来(作为CGfloat,我将其称为totalWIDth)
> set contentVIEwWIDthConstraint.constant = totalWIDth

你很高兴去!请注意,我假设您在此示例的大部分内容中设置了宽度,但它应该适用于高度.

总结

以上是内存溢出为你收集整理的ios – 视图水平和垂直模糊,布局复杂全部内容,希望文章能够帮你解决ios – 视图水平和垂直模糊,布局复杂所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1032675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存