在FluentLayout

时间:2015-06-11 16:27:02

标签: ios xamarin mvvmcross

如果我们在流畅的布局中订购两个控件,一个在另一个

之下
this.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
this.AddConstraints(
      _lblTitle.AtTopOf(this, 10)
      , _lblTitle.AtLeftOf(this, 15)
      , _lblTitle.AtRightOf(this, 5)

      , _lblFullName.Below(_lblTitle, 5)
      , _lblFullName.AtLeftOf(this, 0)
      , _lblFullName.AtRightOf(this, 0));

...我们希望在某些情况下隐藏_lblTitle。我们可以通过绑定来实现。

set.Bind(_lblTitle)
   .For(c => c.Hidden)
   .To(vm => vm.ShowTitle)
   .WithConversion("Visibility");  

问题是_lblTitle不会崩溃,当然会让我们在开始时留下空白。

我们可以尝试在某些情况下从标签中删除文本。这确实是标签文本的一部分,但不会覆盖我们定义的10点边距。什么可能导致不良影响,特别是如果标签具有不同的背景颜色。

我没有尝试绑定控件的高度以隐藏它,因为我不知道设置高度的值是什么,如果我想显示大小灵活的隐藏控件。

我在FluentLayout的QuickLayout解决方案中找不到任何解决方案。

1 个答案:

答案 0 :(得分:0)

当SizeClass发生变化时,我们会遇到类似的情况。我们根据需要添加和删除约束。

在你的例子中,你不能为_lblFullName' s Top创建约束并将其存储为私有变量。

this.fullNameTopConstraint = 
             this._lblFullName.Below(this._lblTitle).ToLayoutConstraints().First()

然后,当_lblTitle的可见性发生更改时,约束将更新为this的顶部或_lblTitle的底部