向地图视图添加约束

Adding constraints to Map View

我在为 Map Kit View 设置约束时遇到问题。

这是我当前约束的屏幕截图:

然而,当我切换到另一个屏幕尺寸时,MKMapView 不会相应地调整大小,尽管具有完全相同约束的标签的行为符合预期:

你能告诉我我做错了什么吗?

这里是 Xcode 项目:

https://dl.dropboxusercontent.com/u/18149046/Test.zip

我打不开你的情节提要 - 它让我感到死亡的旋转沙滩球,所以我自己写了一个。与 Autolayout 一样,有多种方法可以实现最终结果,但每种方法都解决了根本问题:

  1. MKMapViewUITableView 都没有固有尺寸(标签确实有固有尺寸)。
  2. 您需要为 MKMapView 指定 height 以修复 UITableView 和 [=10 的 y positionheight =]

所以我展示了两种方法。

方法 1(我的首选方法:使用 UIStackView):

  1. 在垂直 UIStackView
  2. 中嵌入 MKMapViewUITableView
  3. UIStackView 固定到您的超级视图的布局指南/边缘
  4. 将属性->分布设置为Fill Equally

这样做的好处是您可以直接在 IB 中自定义不同尺寸 类 的布局,并且没有 "magic" 数字,因此它适用于所有尺寸 类 而无需更改

方法 2(将高度硬编码到 MKMapView 的容器视图中):

  1. 添加 UIView 并将 MKMapView 放入其中
  2. 将大小检查器中的 MKMapView 自动调整大小弹簧设置为箭头的纯红色(如果已设置,则取消阻止 I-Bars);见下图
  3. 为包含 MKMapViewUIView 设置高度;在我的示例中,我硬编码 300
  4. 将包含 MKMapViewUIView 固定到前导、尾随、顶部布局参考线/超级视图边缘
  5. 将包含 MKMapViewUIView 固定到 UITableView
  6. 的顶部
  7. UITableView 固定到前导、尾随、底部布局参考线/超级视图边缘

这有一个缺点,您可能需要根据不同尺寸的 iDevices 调整 MKMapView 高度限制(尽管您可以将限制更新为 SuperView; 我没查过)

在我的两个示例中,我都给 MKMapView 一个 height,然后定义 UITableViewy positionheight

如果您正在寻找详细解释 Autolayout 的教程(如果文档没有把所有内容都说清楚),那么我建议 Developing iOS 9 Apps with SwiftiTunesU 上,但 Internet 上有很多.