我正在为iOS7和8 iPhone开发.由于iOS7不支持紧凑高度大小类,我认为解决这个问题的共识是使用任意大小的类来构建横向iPhone布局,并使用纵向宽度常规高度(cWrH)大小类来实现肖像iPhone布局.
我在any-any中对视图设置了约束,然后将cWrH中的约束常量修改为特定于该size类.但是,iOS7设备和Xcode预览会忽略any-any约束,并对纵向和横向使用cWrH约束.
我不知道为什么会这样.我想要做的就是根据方向设置不同的约束.
使用最新的Xcode 6.0.1可以轻松复制.
半相关:Xcode 6自适应UI如何与iOS 7和iOS 6向后兼容?
屏幕截图如下:

我有一个专为iPhone SE设计的ViewController
如你所见,我也有一个约束 Align Top to: Safe Area Equals 75
问题是,是否可以为iPhone 8和iPhone 8 Plus更改此值?例如:
在WWDC 2014平台国家联盟演讲中,Apple工程师介绍了size classes他说我们可以将iPhone大小的UI视为一个compact size class和iPad大小类一样regular size class.但是大小类不受特定设备的限制.他们比那更普遍.如果一个视图控制器看起来像一个iPhone - 它的纵横比与它类似 - 它将具有一个紧凑的大小类.
是否可以在某个时间查看viewcontroller使用的大小类?我发现模拟器内容和Interface Builder预览之间存在矛盾,我想更深入地了解它为什么会发生.
我使用Size Classes在Xcode 6中创建了一个新的应用程序.在使用iOS 7进行测试后,我无法弄清楚如何在横向模式下让iPhone显示特定大小的类.
我首先使用iPhone版本开发了UI作为wAny hCompact,但iOS 7无法识别.我在wAny hAny中有iPhone肖像.
然后我改变它,所以现在我正在使用wCompact hRegular for iPhone portrait.然后我修改了wAny hAny作为横向布局.但是当iOS 7设备处于横向状态时,它不会使用该布局.
iOS 7是否能够根据设备的纵向或横向使用不同的大小类?如果是这样,我应该使用哪个尺寸类?
参考: 有关向后兼容大小类的实用信息.
PS.我并不关心iPad,因为根据iOS 8中的设备旋转,设备不会显示不同的大小类.
我将故事板从旧项目转换为大约30个场景到Xcode 6中的启用大小类的模式.在设置至少一个场景的约束后,我正在尝试编译项目和Storyboard编译时间非常长.我将故事板分成两个故事板来重新编译只编辑过的故事板,但看起来每次都重新编译它们(再次,即使只编辑了其中一个):

有没有办法设置选项只编译编辑过的Storyboard,或只有指向的Storyboard?也许还有其他选择,很高兴阅读答案!
我为这个案子做了一个特殊的测试应用程序.(对不起,已经删除了)
我在控制器的视图中添加了一个视图Storyboard,设置了AutoLayout约束Interface Builder,并使其中一个(垂直空间)不同于不同的大小类.IB的截图
所以值为100 for Any height, Any width和0 for Regular height, Regular width.它运行良好,在iPhone上垂直距离顶部是100,在iPad上它是0.
此外,我IBOutlet为此约束做了,并希望在运行时将其更改为10
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topVerticalConstraint;
Run Code Online (Sandbox Code Playgroud)
似乎我无法改变它,因为它没有任何效果
- (void)viewDidLoad
{
[super viewDidLoad];
self.topVerticalConstraint.constant = 10; // it doesn't work
}
Run Code Online (Sandbox Code Playgroud)
虽然它在我删除Regular height, Regular widthin的时候有效Interface Builder.
我想念大小班吗?
interface-builder ios autolayout nslayoutconstraint size-classes
现有的iOS 7+应用程序支持iPhone和iPad.目前我使用两种不同的故事板进行iPhone和iPad布局,效果很好.现在我尝试使用自适应大小类将其转换为One-Storyboard-Layout.
我的问题是,我的iPhone和iPad布局完全不同.它们不仅为控件使用不同的大小和位置,还使用一些完全不同的视图控制器.
两个故事板都使用MMDrawerController初始VC.但是从那里开始,控制流程就不同了.虽然iPad Storyboard使用了UISplitViewController所有其他ViewControllers的基础,但iPhone却使用了它UITabBarViewController.
这只是一个区别,但还有其他一些.如何在一个故事板中处理这些差异?为了达到这个目的,我将根据当前的Size Class来定义不同的segue.但据我所知,这是不可能的.
一些新的iOS 8自适应Segues的行为可能会有所不同,具体取决于Size Class,但据我所知,不可能为不同的Size Classes指定不同的segue.此外,根据Size Class,无法定义不同的初始ViewControllers.
所以问题是:是否可以在一个故事板中指定两种不同的布局(包括不同的Segues,ViewControllers等)?
切换到单个Storyboard的原因是支持iOS 9中的新分屏和幻灯片功能.在启动时加载不同的故事板取决于屏幕大小/大小类很容易.但是,当动态更改大小类时,无法在运行时切换到另一个Storyboard.是吗?
几天前,我收到了这个错误,我完全陷入了我的项目.
这只是一个Runtime问题,我可以运行我的项目,但根本无法触摸界面构建器.
没有更改任何内容IB以启动此错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: bundleIdentifier != nil'
Run Code Online (Sandbox Code Playgroud)
我的包标识符不是nil.
这是我的日志文件
Process: IBDesignablesAgentCocoaTouch [10742]
Path: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays/IBDesignablesAgentCocoaTouch
Identifier: IBDesignablesAgentCocoaTouch
Version: 8.1 (11524)
Code Type: X86-64 (Native)
Parent Process: launchd_sim [8117]
Responsible: IBDesignablesAgentCocoaTouch [10742]
User ID: 501
Date/Time: 2016-11-11 18:10:08.256 -0200
OS Version: Mac OS X 10.12.1 (16B2657)
Report Version: 12
Anonymous UUID: 544DA3C3-CD64-6444-0CE0-06F48A5B5FE9
Time Awake Since Boot: 9000 seconds
System Integrity Protection: enabled
Crashed Thread: 0
Exception …Run Code Online (Sandbox Code Playgroud) 我希望视图的横向宽度为0.4,屏幕宽度为0.5.
所以我尝试过"因性状而异".我选择了wC hR并设置了0.5并点击了"完成".然后我选择了wR hR并设置为0.4,如下所示:
然而,两个尺寸等级仍显示为0.4.
我也尝试使用"视图为...(wC hR)等设置约束,而不使用约束变化.
我也尝试在显示的框中添加一个单独的大小类,但没有成功.
我正在开发具有通用故事板的通用iPhone/iPad应用程序.对于一些ViewControllers,如果他们在iPad上有一些特定的布局,我会使用大小类.
我有一个ViewController需要在iPhone上以模态方式呈现,但在iPad上它需要在UIPopoverController中显示.
UINavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"ComposeMessageNavigationController"];
ComposeMessageViewController *viewController = (ComposeMessageViewController *)navigationController.topViewController;
//Prepeare my view controlller
...
if (IS_IPAD) {
UIPopoverController * popover = [[UIPopoverController alloc] initWithContentViewController:navigationController];
CGSize screenSize = [UIScreen mainScreen].bounds.size;
CGRect popoverFrame = CGRectMake(screenSize.width / 2, screenSize.height / 2, 1, 1);
[popover presentPopoverFromRect:popoverFrame inView:self.view permittedArrowDirections:0 animated:YES];
} else {
[self presentViewController:navigationController animated:YES completion:^{
}];
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好但是大小类有问题.我在wRegular/hRegular Size Class的故事板上进行了一些更改,但在UIPopoverController的iPad上仍然显示了iPhone布局.这是因为popover的大小比iPad屏幕要低.我可以在Interface Builder中使用Size Classes进行更改,以便在iPad上的popover中显示它们但在iPhone上忽略吗?
size-classes ×10
ios ×8
xcode ×3
autolayout ×2
ipad ×2
iphone ×2
xcode8 ×2
objective-c ×1
swift ×1
xcode6 ×1