如何删除Visual Studio中调试器建议的约束

时间:2019-01-30 23:17:17

标签: c# ios xamarin xamarin.ios xcode-storyboard

在学习Xamarin.iOS的过程中,我已经苦苦挣扎了几周了。

我尝试将searchBar元素放在情节提要上,并在纵向和横向模式下设置约束。一旦我认为一切正确,我就会在Visual Studio调试器中收到以下警告:

2019-01-30 22:43:43.200763+0000 App4[3113:24693] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(
"<_UILayoutSupportConstraint:0x600001378050 _UILayoutGuide:0x7fe7bf425640.height == 44   (active)>",
"<_UILayoutSupportConstraint:0x60000137a120 V:|-(0)-[_UILayoutGuide:0x7fe7bf425640]   (active, names: '|':UIView:0x7fe7bf425460 )>",
"<_UILayoutSupportConstraint:0x6000013780f0 _UILayoutGuide:0x7fe7bf525ce0.height == 34   (active)>",
"<_UILayoutSupportConstraint:0x6000013780a0 _UILayoutGuide:0x7fe7bf525ce0.bottom == UIView:0x7fe7bf425460.bottom   (active)>",
"<NSLayoutConstraint:0x600001362ad0 V:[_UILayoutGuide:0x7fe7bf425640]-(200)-[UISearchBar:0x7fe7bf421940]   (active)>",
"<NSLayoutConstraint:0x600001363a70 V:[UISearchBar:0x7fe7bf421940]-(200)-[_UILayoutGuide:0x7fe7bf525ce0]   (active)>",
"<NSLayoutConstraint:0x6000013787d0 'UIView-Encapsulated-Layout-Height' UIView:0x7fe7bf425460.height == 414   (active)>")

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600001363a70 V:[UISearchBar:0x7fe7bf421940]-(200)-[_UILayoutGuide:0x7fe7bf525ce0]   (active)>

我知道我需要按照调试器的建议删除这些约束之一,但是在Visual Studio中用代码编写的约束在哪里找到?根据下面的gif,我在纵向中仅设置了4个约束,在横向中设置了4个约束。如果我通过情节提要板删除其中一个,则会出现冲突,提示并非所有约束都设置正确。如您在情节提要板上看到的那样,当我从一个设备移动到另一个设备时,没有冲突显示,但是,当我模拟任何设备时,将其翻转为横向并翻转回为纵向,searchBar元素将在屏幕上跳转从其初始center位置开始。我假设这种行为是由我需要删除的约束引起的?任何建议将不胜感激,谢谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

除了删除景观约束之外,您还需要确保约束正确描述了视图的布局方式以及视图的大小。

在可能的情况下,我避免给视图提供任何明确的尺寸限制(高度/宽度),并允许根据位置确定尺寸。

要使搜索栏居中并确保其居中放置而与方向无关,您只需定义以下约束条件即可:

  1. 在容器中水平居中(视图应在x轴上)
  2. 在容器中垂直居中(视图应在y轴上)
  3. 容器的引导空间(视图的宽度应为

前两个约束定义x和y位置。第三个约束条件告诉iOS,视图应与屏幕左边缘“ x”距离。由于iOS知道视图应水平居中(第一个约束),并且距左边缘的距离为x距离(第三个约束),因此它可以计算出要同时满足两个约束所需的视图宽度。

我仅放置了这三个约束,并产生了以下结果(动画gif):

enter image description here