【问题标题】:why do my constraints make the layout different while running app on iphone 5 and iphone 6?为什么我的约束在 iphone 5 和 iphone 6 上运行应用程序时布局不同?
【发布时间】:2017-06-29 07:48:18
【问题描述】:

我正在设计一个 swift 应用程序,它显示照片、地图和内容 - 所有这些都在 UITableView 标题中。

当我在 iphone 5 上运行应用程序时,它看起来像这样:

黄色字段是具有以下约束的文本视图:

和:

这在 iphone 5 上看起来不错。但是,当我在 iphone 6 上运行它时,我看到:

我不明白为什么这两种观点不同。

现在,在我的代码中,viewDidLoad() 我有一个方法调用:

defineHeaderView()

基本上用数据填充标题视图(例如填充用户名、文本、照片)。

我也有这段代码:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

func sizeHeaderToFit() {
    let headerView = myTable.tableHeaderView!

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
    var frame = headerView.frame
    frame.size.height = height
    headerView.frame = frame

    myTable.tableHeaderView = headerView
}

storyboard 中,我将标题视图定义为UITableView 内的视图:

你能解释一下为什么两个屏幕上的视图不同吗?

为了更好地了解情况,以下是其他限制:

地图:

以及这里的背景照片:

有以下限制:

【问题讨论】:

  • 我猜问题出在你的 imageViews 上。 iPhone 5 的屏幕更薄,并且取决于图像和约束的大小(以及如果 clipSubviews 设置为 true/false),图像看起来会非常不同。
  • 您应该尝试调试不同设备上的视图层次结构,以检查实际的框架/约束是什么
  • 关于视图名称和其他约束的信息不足。所以这只是一个假设:您的视图高度(黄色)的约束与“大于或等于”相关。根据您的第二个约束,您的视图的顶部应该比父母顶部低 644 点 - 这是一个静态值。因此,在具有不同尺寸(高度)的设备上,您的视图将在高度上被拉伸。
  • 伙计们,我添加了有关我的约束的更多详细信息,希望它能帮助您理解我的问题
  • 文本字段的顶部被限制在视图的顶部。它应该被限制在地图视图的底部。

标签: ios swift uistoryboard nslayoutconstraint layoutsubviews


【解决方案1】:

请删除您的 UILabel 的顶部约束。

【讨论】:

  • 当我删除顶部约束时,我的 UILabel 会转到屏幕的最顶部...
  • 我不知道这是否是一个有效的答案,但如果您添加对为什么的解释,这将是一个更好的答案解决问题。
  • 我刚刚在原始问题中添加了有关约束的更多信息
  • 你能发一张你想要的屏幕截图吗?基于此,我会建议你设置约束
  • @KuntalGajjar 我想要的屏幕是我的问题中的第一个,正如在 iphone 5 上看到的那样,我想在 iphone 6 上也有地图下方的描述,目前它重叠
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 2018-03-12
  • 2015-03-21
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
相关资源
最近更新 更多