Autolayout调试版本与发布版本不同

时间:2018-03-29 16:19:08

标签: ios uitableview autolayout storyboard uicontainerview

我有一个容纳UITableview的containerview。使用调试版本,一切看起来都不错 -

Debug build

但是在发布版本中,childviewcontroller显示为插入 -

Release build

这是容器视图的故事板 - enter image description here

这是实例化视图的代码 -

self.dailyWeatherTableViewController=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DailyForecastViewController"];
self.dailyWeatherTableViewController.view.frame =self.view.frame;
UIEdgeInsets newSafeArea;
newSafeArea.top=self.headerView.frame.size.height;
if (@available(iOS 11.0, *)) {
    self.dailyWeatherTableViewController.additionalSafeAreaInsets=newSafeArea;
} else {
    // Fallback on earlier versions
}
[self addChildViewController:self.dailyWeatherTableViewController];
[self.forecastContainerView addSubview:self.dailyWeatherTableViewController.view];
[self.dailyWeatherTableViewController didMoveToParentViewController:self];

视图层次结构调试器显示UITableviewCellContentView的封装布局宽度设置为261.一些谷歌搜索似乎表明这与视图的自动调整掩码相关,但在cellforindex方法中更改此设置或设置视图的帧并不能解决问题。

enter image description here

以下是tableview约束的截图 -

enter image description here

1 个答案:

答案 0 :(得分:0)

似乎罪魁祸首是容器的additionalSafeAreaInsets。在向左和向右添加0之后,边距是固定的 -

`if (@available(iOS 11.0, *)) {
    UIEdgeInsets newSafeArea;
    newSafeArea.top=self.headerView.bounds.size.height;
    newSafeArea.right=0;
    newSafeArea.left=0;
    newSafeArea.bottom=0;
    self.dailyWeatherTableViewController.additionalSafeAreaInsets=newSafeArea;
}`

我仍然不确定为什么这是必要的,因为苹果示例不这样做 - https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area?language=objc