我正在使用Xamarin和XCode Interface Builder的混合构建我的UI。
正如您在屏幕截图中看到的,顶部的PlaceholderView可以有不同的内容。我遇到的问题是尝试将提交按钮保留在ContentView的底部。
我正在使用带有ContentView方法的ScrollView并在IB中设置约束。
在ViewDidLoad()中,我加载了PlaceholderView的内容,然后以编程方式设置了PlaceholderView的高度约束。
public override void ViewDidLoad()
{
onlineSuspectDetails = OnlineSuspectDetailsView.Create();
onlineSuspectDetails.BackgroundColor = UIColor.Gray;
SuspectDetailsPlaceholderView.AddSubview(onlineSuspectDetails);
SuspectDetailsPlaceholderView.HeightAnchor.ConstraintEqualTo(onlineSuspectDetails.HeightAnchor, 1).Active = true;
}
当然,我必须为Submit Button设置一个Top和Bottom约束,因此它适用于一种类型 但我看不到根据PlaceholderView的高度来改变它的方法,以便将提交按钮保持在底部。
如果我可以访问Bottom约束,我可以计算新的Top约束,但我找不到访问Bottom约束的方法。我怎么能这样做?
对于我如何解决这个问题,还有其他建议吗?
答案 0 :(得分:0)
可能有更好的方法,但这是一种方法:
UIView
...“标签/字段对”容器;标签/字段对符合标准UIStackView
UIView
...“详情”容器UIView
......这是一个棘手的部分...是一个“Shim”按住底部的按钮视图约束由8
插入,因此我们可以比他们占据整个屏幕/视图更容易看到它们。
位置/尺寸的灰色视图和详细信息视图约束是直截了当的(看起来您对该方面没有任何问题)。
在这种方法中,我们使用“Shim”视图和一些大于或等于约束来管理Button的位置。
Shim固定为前导,顶部为零,其高度约束相对于滚动视图高度设置为>= -30
。它的 bottom 约束也相对于Details视图的 bottom 设置为>= 8
。
这告诉自动布局将Shim 的底部从滚动视图底部 AND 至少 30-pts 详细信息视图底部下方8位。
然后,“提交”按钮的顶部被限制在“填充”视图的底部。
我在Interface Builder中使用滚动视图时发现了一个“怪癖” - 要让IB对必要的约束感到满意,真的很难(可能不可能?)。它会显示冲突,但是如果你按照IB的“修复”所需的布局就会失败。
我实际上并不使用IB / Storyboard,因此我只关注在运行时避免自动布局/约束冲突。
通过查看实际文件可能更容易理解,所以我把它作为GitHub回购:https://github.com/DonMag/SWMoreScrollViewStuff
答案 1 :(得分:-1)
您是如何实际将按钮添加到主视图的?我之前做过类似的事情,除了按钮之外还有一个UIView主人。然后我只是将按钮放在视图下方并将自动布局应用于所有内容(在视图和按钮上应该只是0,0,0,0)。这样,您的按钮始终位于视图的前面,您可以在包含的视图中执行其他所有操作!