iOS自动布局未在底部固定空间显示按钮

iOS自动布局未在底部固定空间显示按钮,ios,objective-c,ios6,ios7,autolayout,Ios,Objective C,Ios6,Ios7,Autolayout,我想在离屏幕底部固定距离处显示一个按钮(下图中为蓝色正方形) 以下是限制条件: 在不同的模拟器上运行应用程序时,按钮会显示在不同的位置。看看下面的图片,看看区别 iOS 6.1和4英寸模拟器: iOS 7和4英寸模拟器: iOS 6.1和3.5英寸模拟器: 在iOS 7和3.5英寸模拟器上,此按钮不可见。即其原点.y大于屏幕高度 知道为什么会这样吗 编辑:编辑的约束(仍不工作) 更新:我可以缩小问题范围。在故事板中,我在主视图中有这个按钮和其他子视图。通过编程,我将mapView添加到

我想在离屏幕底部固定距离处显示一个按钮(下图中为蓝色正方形)

以下是限制条件:

在不同的模拟器上运行应用程序时,按钮会显示在不同的位置。看看下面的图片,看看区别

iOS 6.1和4英寸模拟器:

iOS 7和4英寸模拟器:

iOS 6.1和3.5英寸模拟器:

在iOS 7和3.5英寸模拟器上,此按钮不可见。即其
原点.y
大于屏幕高度

知道为什么会这样吗

编辑:编辑的约束(仍不工作)

更新:我可以缩小问题范围。在故事板中,我在主视图中有这个按钮和其他子视图。通过编程,我将mapView添加到此主视图,并将所有主视图的子视图添加到mapView,如下所示

// Add mapView to main view
mapView = ...;
[self.view addSubview:self.mapView];

// Remove subviews from main view
[self.button removeFromSuperview];
...

// Add subviews into mapView so that they are visible on map
[self.mapView addSubview:self.button];
...
现在,如果我对上面的代码进行注释并运行应用程序,那么按钮将显示在正确的位置,但如果上面的代码未注释,我将遇到按钮错位的问题


更新:这个问题的部分答案是以编程方式添加约束。我说部分,因为我有其他视图,以及这个按钮,它们都被正确显示。我在代码中没有它们的约束。因此,仍然有一些东西需要探索。

您将按钮与底部布局指南对齐,这与我在本例中建议的将按钮与superview底部对齐不同。将其与垂直布局指南对齐取决于iOS6/7以及是否允许视图控制器的内容位于导航栏/底部栏下方

将其与superview(容器)对齐可以解决您的问题。但解决此问题的正确方法是设置视图控制器的正确“延伸边”。我假设您在iOS7上启用了“顶栏下”和“底栏下”,这将解释偏移。例如,禁用它们将模拟与iOS6相同的行为,并且不会以这些不同的偏移结束

这实际上取决于视图控制器上的内容(导航栏、底部栏等)以及如何设置视图控制器的“edgesForExtendedLayout”

编辑: 使命感
[self.button removeFromSuperview]

不仅会从视图中删除按钮,还会删除您之前设置的所有约束!因此,您必须再次设置约束-手动或避免从其superview中删除按钮。我猜这就是为什么它在界面构建器中看起来很好,而在运行时却被搞砸了

:

调用此方法将删除引用所选视图的任何约束 正在删除或引用视图子树中的任何视图 正在移除


由于您使用的是
X-code 5.0.2
xib的
界面生成器在默认情况下自动显示为
Retina 4英寸全屏

尝试将
属性检查器中的设置更改为
视网膜3.5英寸全屏

然后相应地更改约束

尝试更改此选项&查看如何更改
3.5英寸屏幕的约束条件


当您以编程方式添加按钮时,您需要添加
自动布局约束也是通过编程实现的


我已经使用了
self.edgesForExtendedLayout=UIRectEdgeNone,我尝试从superview的底部设置约束,而不是从底部设置准则,但不起作用。您是否有任何不明确的布局规则,或缺少已知的约束?通常,您可以在日志中找到一些相关信息。此外,请比较iOS 6.1的照片和两种不同屏幕尺寸的设备。日志中没有自动布局问题。从您提供的信息很难理解为什么这不起作用。可能还有另一个优先级更高的约束得到了满足。如果您能更深入地了解您的视图Hirachy和其他约束,那将非常有趣。我重新测试了按钮的约束,通过将“内容扩展”设置为“无”,它们在空白视图控制器上完全工作。@footyapps27问题在于按钮的
origin.y
值,没有与按钮左/右对齐的视图。所有视图都位于此按钮的上方或下方。是否使用X-Code 5.X进行设计?@footyapps27是的,其5.0.2Xcode 5可以预览iOS 6中故事板/XIB的布局。当你这么做的时候,你看到了什么?您可能还需要上传一个显示您的问题的精简项目。我在IB中将
视图设置为iOS 6.1和更早版本的
。所以我看到的是3.5英寸屏幕。我没有按编程方式添加按钮。@Geek您的问题中有此代码-它做了什么??/从主视图中删除子视图[self.button removeFromSuperview];…//将子视图添加到mapView中,以便它们在地图上可见[self.mapView addSubview:self.button];好啊您正在谈论添加到mapView。有没有办法复制约束而不是以编程方式重新添加?@Geek-没有解决方法-理想的方法是通过代码使用一种方法,否则您将遇到一些难以解决的问题OK。这里我没有mapView的选项。由于它是谷歌地图,我必须通过代码添加。我试图通过调用
self.button.constraints
保存按钮的约束。但该属性仅返回宽度和高度约束,而不返回x和y原点值的其他2个约束。