我在Xcode 6.1上启动了一个新的单一视图项目,
转到我的目标并将Device Family设置为Universal和Deployment目标为7.1
在故事板中,我在Size类中放置了一个红色标签,Regular Width | Any Height
在Size Class中放置了一个蓝色标签Compact Width | Any Height
根据文档,我在ipad上运行时会看到一个红色标签,在iphone上运行时会看到蓝色,到目前为止,这在模拟器和实际设备上均可正常工作.
现在我回到目标并将Device Family设置为IPad,再次运行应用程序:
模拟器上的IPad 2(7.1) - 红色标签
IPad 2(7.1)(真实设备) - 蓝色标签?!?!?
IPad 2(8.1)(真实设备) - 红色标签
同样适用于IPad Air/IPad mini以及IOS 7.1的所有其他IPad我都遇到过
基本上我在通用故事板上看到这一点,当在ios 7.1中为IPad设置设备系列时,故事板被认为是紧凑的尺寸.我必须与IOS 7.1兼容,我的应用程序将首先仅针对IPad发布.有没有人知道如何解决它?
根据Apple文档:对于支持早于iOS 8的iOS版本的应用程序,大多数大小类都是向后兼容的.大小类只要向后兼容即可
该应用程序使用Xcode版本6或更高版本构建
该应用程序的部署目标早于iOS 8
大小类在storyboard或xib中指定
高度分量的值不紧凑
所有这些都适用于我的例子.
我想要为所有常规高度垂直排列两个相等高度的视图.但是,对于Compact Heights,我希望水平排列视图.如下图所示:
为此,我在适用于所有内容的wAny-hAny size类中添加了一般约束.然后我为wAny-hRegular和wAny-hCompact大小类添加了特定的约束.这适用于wAny-hRegular和wAny-hCompact(以及在模拟器中测试应用程序),但它让我在wAny-hAny中缺少约束.如果我在wAny-hAny中添加那些缺少的约束,那么我在wAny-hRegular或wAny-hCompact中得到冲突的约束.我不知道如何摆脱错误.
以下是对我所做的更详细的解释.
通过执行以下步骤,我能够在模拟器中获得一些功能.
wAny hAny
对于任何宽度任何高度我设置以下4个约束:
也就是说,我将蓝色固定在顶部和左侧,我将红色固定在右侧和底部.无论使用何种大小类,都始终需要这些约束.
wHny hRegular
对于任何宽度常规高度,我添加了以下4个约束:
也就是说,我将蓝色固定在右侧,红色固定在左侧.我还将红色的上边缘固定在蓝色的下边缘.而我的红色和蓝色相等.这解决了常规高度的所有约束问题.
wAny hCompact
对于任何宽度紧凑高度我添加了以下4个约束:
也就是说,我将蓝色固定在底部,红色固定在顶部.我还将红色的右边缘固定在蓝色的左边缘.我做了红色和蓝色相等的宽度.这解决了Compact Height的所有约束问题.
通过上面的设置,一切都可以在故事板预览中看到(请参见上面的第一张图片),并且在我测试的所有尺寸的模拟器中都能正常工作.
但是,在Interface Builder中,我收到了wAny hAny Size Class的以下Missing Constraint错误:
这有点像catch-22,因为如果我尝试添加缺少的约束,那么我会使用Regular或Compact Size Class约束创建冲突的约束.以Compact为例:
我该如何解决这个问题?
这就是我的故事板和预览中的样子:
这就是我在故事板中为此设置的内容UIStackView:
但是当我在真实设备上运行时,一切都会改变:
为什么会这样?
请注意我这里有两个UIStackViews:带标签的图标框,两个按钮.第二个正常工作,但不是第一个.为什么?它以完全相同的方式完成.两个直接的子视图UIStackView
编辑
我意识到出现的问题只与UIImageView作为直接子视图UIStackView.
好吧,我终于使用Xcode 8进入autolayout了.
我可能在概念上有错误的想法.但是我在IB中有一个视图,在视图中有2个标签,一个按钮和一个imageview死点,尺寸为300 x 300,用于6plus和6个设备.
我想要做的是改变iPhone 5(SE)的图像视图大小,所以我点击Vary for Traits并选择高度和宽度,然后将值更改为150 x 150点击完成,所有看起来都很好看iphone 5(SE).
现在点击返回6plus和6它也调整为150 x 150,但我希望图像大小保持为300 x 300.再次,我可能完全有错误的想法.
我认为这一点的重点在于它的大小取决于所选择的内容,即变化.
我正在使用Autolayout和Size Classes从xib加载视图.在该视图中,有一个子视图,viewWithSizeClasses其高度受约束,取决于大小等级.
我想要做的是立即加载约束loadNibNamed,以便根据当前的Size Class获得适当的高度.
我尝试了各种组合layoutSubviews(),updateConstraints()但无论我做什么,我总是得到默认的Any,Any height.
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let xibView = NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil).first as View
self.view.addSubview(xibView)
height = xibView.viewWithSizeClasses.frame.size.height // <- Any, Any height
}
Run Code Online (Sandbox Code Playgroud)
我正在iOS8或更新版本上部署.
我尝试在storyboard中设置UITextView的字体大小类,但它总是显示系统字体(默认字体,大小和颜色).如果我没有设置字体大小类,它会显示正确的字体.
这是一个截图:

有谁知道如何解决这个问题?
我正在关注这篇文章,以便在ios 构建适用于iOS 8的自适应用户界面中构建自适应布局 .
它可以在iPhone上正常工作.现在我不想在iPad上给出同样的效果.但对于iPad自适应布局是行不通的.
这是iPhone5中应用程序的屏幕截图 (绿色框表示view1,黄色框表示view2)
1.Portrait模式
问题:如何才能为iPad实现同样的效果?
扩展问题:如何在横向模式下设置iPad的初始方向?
有一些关于这个的帖子,但似乎没有一个完整的解决方案。
通过 IB 使用自适应布局我可以轻松更改特定大小类的字体大小,但是我有一个使用 UILabels 的自定义视图,我想根据使用的大小类(使用 swift)以编程方式设置字体大小 - 有没有其他人有这个问题或遇到解决方案?
标题几乎描述了所有内容,但这里有详细说明......要在我的应用程序中播放视频,我正在使用 AVPlayerViewController 以模态方式呈现
let player = AVPlayer.init(url: url)
let playerViewController = AVPlayerViewController.init()
playerViewController.player = player
parentViewController.present(playerViewController, animated: true, completion: {...})
Run Code Online (Sandbox Code Playgroud)
一切正常,视频全屏播放,我可以将设备旋转到横向和纵向……仍然一切顺利。
当我点击右下角的对话气泡以更改音频或字幕设置时,这种 UIAlertController 以纵向模式显示(iPhone 7 加纵向):

在横向模式下点击相同的按钮时,它看起来像这样(基本相同,但会以纵向显示,iPhone 7 横向):

现在是实际问题:在横向模式下在 6/6s/7 PLUS 设备上播放电影并点击对话气泡时,应用程序崩溃!这是出现在调试器输出和堆栈跟踪中的内容:
2017-08-10 12:08:18.683184+0200 MyApp[27739:6396143] [Assert] transitionViewForCurrentTransition 未设置!(<_UIFullscreenPresentationController: 0x7ffe3e586000>)

对我来说,它看起来像一个 Apple 错误,因为我在这里没有做任何特别的事情(至少我是这么认为的)并且因为崩溃仅在使用 plus 设备时显示,这是唯一具有紧凑和常规尺寸类组合的设备.
有人知道这里发生了什么吗?
ios ×10
size-classes ×10
autolayout ×3
swift ×2
xcode ×2
xcode8 ×2
constraints ×1
crash ×1
ios8 ×1
ipad ×1
iphone ×1
landscape ×1
objective-c ×1
storyboard ×1
uitextview ×1
xib ×1