我知道如何设置约束,但是我真的需要知道如何正确设置约束。
基本上,我有一个自定义的视图子类,它继承了UIView,我需要指定约束,例如,标签必须始终在按钮上方10pts。
这样的约束,该在哪里设置?现在,我在listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
Object item = adapter.getItem(position);
}
});
函数中设置约束,在指定约束后我在其中调用init
。但是我也读过您应该在layoutIfNeeded
中设置约束,但是我再次在某个地方阅读了它,layoutSubviews将被调用很多次,因此在此处设置约束真的没有意义。
我还玩了一点layoutsubviews,我意识到我在layoutsubviews中设置的约束实际上对布局没有任何影响。到目前为止,我仅通过直接调用layoutIfNeeded成功设置了约束。
我也很好奇,是否只需要设置约束一次或每次刷新?
我这样做正确吗?在自定义类中应该在哪里设置约束?
答案 0 :(得分:0)
每次刷新时设置约束(例如在LayoutSubviews内部)将破坏约束并导致大量不必要的工作。 WWDC上有很多关于高性能自动布局的话题。
https://developer.apple.com/videos/play/wwdc2018/220
但是,通常使用Interface Builder可以使您摆脱自己;也就是说,系统将在View生命周期的适当时间处理添加的约束。
如果必须以编程方式添加约束,则将它们添加到初始化程序中并调用layoutIfNeeded()是一个很好的解决方案。