使用Autolayout的Xcode中的Storyboard外形和活动scheme之间的关系是什么?
我有一个针对iOS7的Xcode 5.0.1项目。 我正在devise一个Storyboard的应用程序,我正在使用Autolayout。
当我构build并运行应用程序时,我正在使用iOS模拟器来testing它。 我切换3.5“和4”视网膜scheme之间查看不同的屏幕尺寸的应用程序。
大多数情况下,一切正常,Autolayout似乎很好。 但是,在一个屏幕上,布局有问题,但只有在以下情况下:
- 我在iOS模拟器下将该scheme设置为“iPhone Retina(4英寸)”
- 在故事板上,外形设置为“视网膜3.5英寸”
在这种情况下,Autolayout似乎无处不在,除了一个地方我使用更复杂的视图结构:
但是,如果我简单地将故事板上的外形因素更改为“Retina 4英寸”,故事板上的所有内容都看起来不错,而且它在运行时看起来也不错。 如果我在“视网膜3.5英寸”的形状因素,并将iOS模拟器更改为“iPhone视网膜(3.5英寸)”,也是如此:
所以,我的问题是:这是正确的行为? 故事板的外形尺寸是否必须与您正在testing的设备相匹配? 我想知道,因为这是故事板中唯一引起问题的视图,但是,切换形状因子使得所有的行为都正常,所以看起来Autolayout工作正常。
不,Storyboard的形状因子是为了向您展示不同屏幕尺寸的外观。 它没有规定运行时视图的大小。
我的猜测是,在你的视图中必须有一些限制,在屏幕上没有正确设置4“屏幕。
我知道这个问题很老,但我刚刚经历并解决了同样的问题。
我的情况是这样的:
1)我有一个UITableView,约束到我的视图控制器的框架的大小。 2)在viewDidLoad方法中,我添加了一个表头视图,使用我的表视图的框架作为头框架。
UIView *headerView = [UIView alloc]initWithFrame:self.tableView.frame]; self.tableView.tableHeaderView = headerView;
这给了我一个标题,把表格视图上的内容隐藏起来,直到标题被刷新(类似于雅虎的天气)。
3)在标题的底部,我有一对标签显示在向上滑动之前可见的信息。
问题:
如果我在3.5“模拟器上启动了我的应用程序,但是将故事板设置为4”电话,我的标题视图底部的标签将呈现在屏幕底部以下,将其切断。
如果我在4“模拟器上启动我的应用程序,但故事板设置为3.5”,标签在表格的标题视图中显示得太高。
如果我在故事板设置的相同尺寸的模拟器上启动应用程序,那么一切都很完美。
经过几个小时的敲打之后,我意识到我的表格视图的框架在调用viewDidLoad时没有使用自动布局约束来设置。 这是从我的故事板在这一点上推断的大小,并在以后的约束基础上进行调整。 因此,我的表视图标题与我的表视图的大小不一样。
移动代码添加表视图标题,根据表视图的大小
viewDidLayoutSubviews
方法,当自动布局约束已经被应用解决了这个问题。
我有一个与UIScrollView相同的问题。 上面的user3847320答案可能是正确的。 但在我的情况下,我做了viewDidLayoutSubviews布局的东西崩溃。
要快速避免这种情况,只需在viewDidLoad中添加以下内容:
- (void)viewDidLoad { [super viewDidLoad]; self.scrollView.frame = self.view.frame; }
- Swift:区别为String? 作为? string
- 我的第一个Swift应用程序– Ricardo Hurla –中
- UITableCell AccessoryView:设置accessoryView等于UIImageView无限循环
- Testflight SDK和iOS模拟器 – 如何使用?
- 领域date查询
- 在iOS 7中,Mapview不可滚动并可与UISearchDisplayController触摸
- 如果快速刷卡,UIPageViewController didFinishAnimating不会被调用
- iOS UICollectionView – 默认stream程,从右到左填充行
- tableView节标题消失SWIFT