UIActivityViewController,无法同时满足约束,在设备上时8.x的编译为iOS 7.x的

问题描述:

我有一个上的UIViewController所示(名为viewCon这里)的UIActivityViewControllerUIActivityViewController,无法同时满足约束,在设备上时8.x的编译为iOS 7.x的

// items contains text and/or image 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; 
activityViewController.excludedActivityTypes = @[UIActivityTypePostToWeibo, UIActivityTypeAssignToContact]; 

[viewCon presentViewController:activityViewController animated:YES completion:NULL]; 

我使用Xcode 6.1。我的应用的部署目标为7.0。我在两个物理iPhone(5S(8.0.2)和6(8.1))上运行它。
当我在物理设备(不是模拟器)上编译iOS 7.x的应用程序时,将显示UIActivityViewController并且可以正常工作,但它会显示在所有屏幕上(高度过大),并且此日志消息将打印在输出:

Unable to simultaneously satisfy constraints. 
Probably at least one of the constraints in the following list is one you don't want. Try this: 
(1) look at each constraint and try to figure out which you don't expect; 
(2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSLayoutConstraint:0x1742941e0 UIView:0x174385960.bottom == _UIAlertControllerView:0x134ef4fc0.bottom>", 
"<NSLayoutConstraint:0x174293d80 V:|-(0)-[UIView:0x170385960] (Names: '|':_UIAlertControllerView:0x134ef4fc0)>", 
"<NSLayoutConstraint:0x17429a270 UIView:0x170385960.bottom <= _UIAlertControllerView:0x134ef4fc0.bottom>", 
"<NSLayoutConstraint:0x174292cf0 UIView:0x174385960.centerY == UIView:0x170385960.centerY>", 
"<NSLayoutConstraint:0x174294410 V:|-(>=8)-[UIView:0x174385960] (Names: '|':_UIAlertControllerView:0x134ef4fc0)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x17429a270 UIView:0x170385960.bottom <= _UIAlertControllerView:0x134ef4fc0.bottom> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

当我编译和运行的iOS 8.x一切正常。但我当然需要为iOS 7.x编译兼容性。
UIViewController使用使用Autolayout的.xib。但我试图不使用Autolayout并出现同样的问题。我尝试了另外两个项目,也在iOS 7上,它仍然是一样的。

我也试图呈现activityViewController前添加以下代码,但同样的问题:

[activityViewController.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

我看着别人的开发人员有同样的问题(here),但它是由Xcode的6公测引起的。我有版本6.1。

+0

我有类似的问题,看起来像有没有为它的解决方案呢。如果您的项目最低允许版本为7.x,则您必须使用iOS 8.x SDK编译项目,并且所有项目都可以在iOS 7.x上正常工作。 – 2014-11-04 15:21:31

+0

在8.x iPad上编译时发生这种情况。你知道那里是从哪里来的吗? – 2015-06-30 05:06:38

我想这是一个iOS7的错误。 它带有一些特殊的sourceRect值。 您可以通过集中的另一个sourceRect解决这个问题,例如,你可以尝试:

[activityView popoverPresentationController].sourceRect=CGRectMake(0,200,768,20);