为什么我的约束在iPhone 5和iPhone 6上运行应用程序时使布局不同?

问题描述:

我正在设计一个swift应用程序,显示一张照片,地图和内容 - 所有这些在UITableView标题中。为什么我的约束在iPhone 5和iPhone 6上运行应用程序时使布局不同?

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

enter image description here

黄色的领域是具有以下约束文本视图:

enter image description here

和:

enter image description here

这看起来对iPhone 5的精美然而,当我在iPhone上运行6,我看到:

enter image description here

我不明白为什么这两个不同意见。现在

,在我的代码,在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我定义headerview为UITableView内部的视图:

enter image description here

你能解释我为什么认为两个屏幕都不一样?

为了提供更好的洞察,这里有其他方面的限制:

地图:

enter image description here

和背景的照片即是在这里:

enter image description here

有以下约束条件:

enter image description here

+0

我猜问题是你的imageViews。 iPhone 5的屏幕比较薄,并且取决于您的图像和约束的大小,(如果clipSubviews设置为true/false),图像看起来会非常不同。 – PeejWeej

+0

您应该尝试调试不同设备上的视图层次结构,以检查实际框架/约束是什么 – PeejWeej

+0

没有足够的关于视图名称和其他约束的信息。所以这只是一个假设: 您的视图高度约束(黄色)与“大于或等于”相关。根据你的第二个约束,你的观点的顶端应该是父母顶端的644点 - 这是一个静态值。因此,对不同尺寸(高度)设备上的观点将在高度拉伸。 –

请删除UILabel的顶部约束。

+0

当我删除顶部的约束,然后我的'UILabel'进入屏幕的最顶端... – user3766930

+2

我不知道这是否是一个有效的答案,但它会是一个*更好*答案,如果你添加一个解释*相关为什么*这将解决这个问题。 – dfd

+0

我刚刚在原始问题中添加了有关约束的更多信息 – user3766930