我正在开发一个项目,其中包含一些比我以前使用的界面元素更复杂的动态布局。我总觉得编写复杂的代码来检查某个东西是否靠近某个位置,并在这种情况下将其向某个方向移动x%,等等,很愚蠢。编程应该尽可能声明性!
正是因为我要做的事情相当简单,我认为这是尝试新事物的好机会,我想使用
这里有什么想法、经验、示例、警告、见解可以提供帮助吗?
我将给出一个非常简单的例子,以便有具体的内容来回答。如何使用
("viewB应该水平居中于坐标300上,除非它的左边缘与viewB的右边缘相距不到20个像素,在这种情况下,viewA的左边缘应保持固定在viewB的右边缘右侧20个像素处,而viewA的水平中心向右推移。")
编辑:任何解决方案可能都需要使用
正是因为我要做的事情相当简单,我认为这是尝试新事物的好机会,我想使用
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
。 此答案相关。