首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大小类iOS 7兼容性问题

大小类iOS 7兼容性问题
EN

Stack Overflow用户
提问于 2015-05-05 13:41:04
回答 2查看 197关注 0票数 1

我试图使用自动布局来定位两个视图,如下面的图片。我知道,使用iOS 8和size类,我可以为不同的布局创建布局,而且它可以工作。然而,我的目标是iOS 7,并且根据https://stackoverflow.com/a/26841899/4170419等几个帖子,规模类的iPhone景观模式不会适用于早期版本。那么,如何根据我的图片在不同的方向上定位这两种观点呢?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-05 14:28:51

紧凑宽度紧凑型高度大小类不会在iOS7上工作。它将与紧凑的宽度,任何高度可悲地冲突。

很好的总结:How can Xcode 6 adaptive UIs be backwards-compatible with iOS 7 and iOS 6?

对于您的特殊情况,我认为您可能不得不为iOS7使用一些手工工作。一种可能的办法是:

1)在标签区域和右手边之间添加一个UIView,将其固定在顶部、底部、标签区域的引导和尾随到大小为0的superview。如果没有内容,这应该是0宽度。

2)在标签区域和底部之间添加一个UIView,将顶部固定在标签区域,引导和尾随到superview,并以大小为0的底部。如果没有任何内容,这应该会以0高度结束。

3)将两个视图的IBOutlets添加到控制器.h文件中。

4)在viewDidLoad中,创建MKMapView并将其放置到当前方向的适当视图中。

这使您在启动时,地图视图在您想要的位置。

5)在控制器中添加方向变化检测。当方向改变时,将MKMapView从其当前视图中移除,并将其添加到新方向的视图中。

不确定这是否有效,但它可能为您提供在iOS8和iOS7上使用一段代码所需的内容。

您可能需要为视图的宽度/高度添加约束,或者设置MKMapView框架,以便在布局发生时为每个方向获得正确的维度。

希望有人能想出一个更简单的解决方案,但在这种情况下,size类似乎不太可能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-05-07 21:52:14

最后,我解决了这个问题:)首先,我的两个方向都表明,地图视图必须与主视图的底部和右边对齐。这些约束是固定的。然后,为了关闭Xcode,我设置了纵向定向的约束。

由于iPad有足够的屏幕状态,所以我只对iPhone应用了旋转修复。我相信它可以写得更好,所以如果你有任何意见,请分享。谢谢。

代码语言:javascript
复制
lazy var landscapeLeft: NSLayoutConstraint = {
    return NSLayoutConstraint(item: self.myMap, attribute: .Leading, relatedBy: .Equal, toItem: self.idLabel, attribute: .CenterX, multiplier: 1.0, constant: 0)
    }()

lazy var landscapeTop: NSLayoutConstraint = {
    return NSLayoutConstraint(item: self.myMap, attribute: .Top, relatedBy: .Equal, toItem: self.idLabel, attribute: .Bottom, multiplier: 1.0, constant: 8)
    }()

lazy var portraitLeft: NSLayoutConstraint = {
    return NSLayoutConstraint(item: self.myMap, attribute: .Leading, relatedBy: .Equal, toItem: self.view, attribute: .Leading, multiplier: 1.0, constant: 8)
    }()

lazy var portraitBottom: NSLayoutConstraint = {
    return NSLayoutConstraint(item: self.myMap, attribute: .Top, relatedBy: .Equal, toItem: self.expectedDateLabel, attribute: .Bottom, multiplier: 1.0, constant: 8)
    }()


func fixLayout() {

    if (UIDevice.currentDevice().userInterfaceIdiom ==  UIUserInterfaceIdiom.Phone) && (UIDevice.currentDevice().orientation.isLandscape) {
        self.view.removeConstraint(portraitLeft)
        self.view.removeConstraint(portraitBottom)
        self.view.addConstraint(landscapeLeft)
        self.view.addConstraint(landscapeTop)

    } else {
        self.view.removeConstraint(landscapeLeft)
        self.view.removeConstraint(landscapeTop)
        self.view.addConstraint(portraitLeft)
        self.view.addConstraint(portraitBottom)
    }

}

override func updateViewConstraints() {
    super.updateViewConstraints()
    fixLayout()
}

更新:我太天真了,认为我以前写的代码与iOS 7兼容,仅仅是因为它编译到了ios 7目标上,并且在iOS 8模拟器上工作。多亏@Rory McKinnel,我发现我使用的方法在iOS 7中是不可用的。这一次,我在iOS 7和iOS 8模拟器上进行了测试,它们都能工作。我希望这是这个问题的结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30054685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档