ios – 视图水平和垂直模糊,布局复杂
我的故事板上有一个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约束,并用<赋予它一个= x约束;您正在考虑的每个视图的1000优先级 – 我的垂直模糊问题已经解决.我还没有针对所有4个视图的水平模糊度的解决方案. 水平模糊 好的,我现在也修复了水平模糊的部分.它归结为滚动视图(以及表视图)中的约束与其他任何类型的视图的工作方式不同.这是一步一步的样子. >放置UIScrollView 通过这种设置,给予超级视图约束的UILabel将约束到具有已定义大小的contentView,因此没有任何歧义. 或者,如果要修复UILabel的大小(或根据应用程序的功能动态计算它们),并让contentView展开以保存它们: >放置UIScrollView 然后在viewWillLayoutSubviews的代码中 >将所有UILabel的宽度和它们之间的任何间隙加起来(作为CGFloat,我将其称为totalWidth) 你很高兴去!请注意,我假设您在此示例的大部分内容中设置了宽度,但它应该适用于高度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Oracle中常见的33个等待事件小结
- flash – ExternalInterface.call在IE 9中泄漏
- VB 中使用SendKeys开启Run 窗口和是用API函数去开
- flex ItemRenderer (flex实现QQ通信界面)
- xml解析之pull
- 将xml对象(带属性)中的xml解析为cakephp中的数组
- postgresql – Postgres sql失败的脚本错误
- c# – 无法将对象类型“System.Web.Mvc.HtmlHelp
- 关于VB6.0的Microsoft windows common control 6
- objective-c – 如何从Modal ViewController重新