在较高的层面上,我们试图了解Framer渲染具有动态高度的图层的最佳方式。
我们将我们的设计从Sketch导入Framer。我们正在构建一个简单的问答页面。每个页面有1个问题,用户将完成20个问题,一个问题页面接一个。
页眉,页脚和提示符的高度始终相同。 问答部分根据我们想要呈现的问题和答案而变化。
我们看到三种可能的解决方案:
问题: 我们在#2的问题是重新定位“所有层”的前期工作很多。据我们所知,Framer复制所有草图图层并根据它们的绝对位置(x和y坐标)定位它们。由于所有图层都是绝对定位的,因此必须通过每个图层并根据它们相对于彼此的定位方式重新对齐。这真的看起来很麻烦,据我们所知,Framer没有辅助功能来帮助实现这一目标。当然,我们可以编写一些通过父树工作的东西,并重新调整兄弟姐妹的位置,但这感觉太容易出错,而且不符合使用Framer构建原型的精神。
我们与#3的问题是,这只是感觉就像构建网站一样,这不像是原型设计。因为我们不能直接导入像素完美的草图设计,所以有很多像素推动。我们希望在设计更改时快速更新原型。我们希望设计会经常更改,因为我们正在运行大量用户测试并获得很好的反馈。每次将设计更改为“重新设计”我的原型时,这种方法会让我花费大量时间。
思考?我们缺少明显的东西吗? 感谢您的阅读和感谢您的时间。
答案 0 :(得分:0)
I don't know how much chrome you have around the cards, and if you want to define the margin between the layers inside Sketch, but writing a function to align a list of layers with variable height on top of each other doesn't actually have to be that hard:
stackLayers = (layerList, startY = 0, spacing = 0) ->
currentY = startY
for layer in layerList
layer.y = currentY
currentY = layer.maxY + spacing
Full example here: http://share.framerjs.com/sztcm5e9l4li/
If you keep the names of your Sketch layers containing the cards the same, you can re-import from Sketch and the repositioning will keep working, even if the size changes.
Because the structural tree of groups in your Sketch file is contained inside Framer, you can place all the layers you want to stack on top of each other in one group and call stackLayers(sketch.nameOfGroup.children, 0, 10)
to stack all children of 'nameOfGroup' on top of each other.
答案 1 :(得分:0)
我们最终用方法#2来解决这个问题。总结:交换图层并重新定位下面的所有图层,同时遍历所有父图层并根据需要调整大小(例如,如果新图层小于我们要交换的旧图层,我们需要缩小父图层差异)。
一般方法是:
代码要点:https://gist.github.com/MrNickBreen/5c2bed427feb8c701d5b6b1fbea11cb4
特别感谢Niels提出的帮助我解决这个问题的建议。