我正在开发一个项目,其中包含一些比我习惯的更复杂的界面元素动态布局。我总是觉得编写复杂的代码来检查某某是否接近某某,在这种情况下将其向某个方向移动 x% 等是愚蠢的。这不是编程应该做的方式。编程应该尽可能地声明性!
正是因为我要做的事情相当简单,所以我认为这将是一个尝试新事物的好机会,我想将其NSPredicate
用作一个简单的 约束求解器。到目前为止,我只用于NSPredicate
非常简单的任务,但我知道它的功能更多。
有什么想法、经验、例子、警告和见解在这里有用吗?
我将举一个非常简单的例子,所以会有一些具体的答案。我该如何NSPredicate
解决以下约束:
viewB.xmid = (viewB.leftEdge + viewB.width) / 2
viewB.xmid = max(300, viewA.rightEdge + 20 + viewB.width/2)
(“viewB 应该水平居中在坐标 300 上,除非它的左边缘在 viewB 右边缘的 20 像素范围内,在这种情况下,viewA 的左边缘应该固定在 viewB 右边缘右侧 20 像素处,并且 viewA 的水平中心被推到正确的。”)
viewA.rightEdge
并且viewB.width
可以变化,这些是“输入变量”。
编辑:任何解决方案都可能必须使用NSExpression
方法-(id)expressionValueWithObject:(id)object context:(NSMutableDictionary *)context
。
这个答案是相关的。