2016-04-17 57 views
0

我以编程方式从故事板加载视图,但存在与我的子视图高度有关的问题(我正在使用Autoresize子视图等)。iOS UIView不调整子视图的大小?

当视图加载时,主UIView看起来是正确的大小,但依赖于约束来动态计算它们的最终高度的子视图似乎没有调整它们在界面构建器中设置的大小。

载入像这样的视图:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ApplicationRecordingViewController* recordingController = (ApplicationRecordingViewController*)[storyboard instantiateViewControllerWithIdentifier:@"recordView2"]; 
[self presentViewController:recordingController animated:NO completion:nil]; 

Interface Builder

橙色区域的高度是从主视图中灰色区域的顶部的顶部。灰色区域是固定的高度

奇怪的是,如果我将界面生成器中的模拟尺寸设置为我手机的正确视图,尺寸就会变大。我猜子视图的初始高度是“烘烤”到视图中的,但是当视图实际加载时(通常)调整大小后?

注意:橙色区域应完全填满我加载到它的相机视图。

incorrect height

不正确的高度

correct height

如果我改变模拟布局

很想知道我做错了正确的高度!

编辑1:约束

相机是橙色位。摄像机底部约束当前设置为视图的底部+灰色条的足够空间。也尝试设置底部以匹配灰色条的顶部!

Constraints

Constraints 2

Link to Storyboard with Scene

+0

什么约束有大家的各种意见设定? – Paulw11

+0

我已经添加了约束编辑! – Paul

+0

你不是水平定位重叠视图,除了相对于蓝条。如果你想覆盖层将相对于我期望的相机视图的底部进行定位看到约束如此说 – Paulw11

回答

0

我知道你所有的比我好,但我经历过同样的在我的最后一个项目。我的相机视图里面的UIView不是全屏或调整大小和适合整个UIView,我也张贴在my daily blog.

实现viewDidLayoutSubviews - 在该方法内,布局再次您的视频预览图层。在该方法中,只需重新布置您的视图。之后,您的视频预览会填充其父级的高度和宽度,或者您已经定位的任何内容。

该问题也与约束和视图的层次结构有关。

enter image description here

+0

我认为这绝对是相机视图。事实证明,我的解决方案是在初始化相机视图本身之前确保所有内容都已正确布置(例如,在viewDidAppear中)。 – Paul

0

您已经得到了答案。

'如果我在界面生成器中将模拟尺寸设置为手机的正确视图,尺寸就会生效。

您可以调用一些函数来获取viewDidLoad或viewWillAppear中的高度。

改变这样的代码

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self.view setNeedsLayout]; 
    [self.view layoutIfNeeded]; 

    CGFloat height = [self getHeight]; 
} 

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGFloat height = [self getHeight]; 
} 
0

,我可以看到你的故事板限制您已设置底部空间,底部布局引导150。我认为这是问题。如果您将底部视图的高度设置为固定高度,则无需从底部布局指南 - > 150设置常量。

您的旧约束: - >

enter image description here

只要设定从底部绿景orangeview = 0

检查新约束的空间,

enter image description here

这里是你的故事板链接,

Storyboard Download link

这是你的输出,

enter image description here

-1

或许你可以尝试摆脱这两个钩。

enter image description here

0

调查布局多一点后,我发现摄影机视图(橙色)似乎是正确的尺寸,但直播相机预览不是。

的解决办法是SCRecorder)的init()方法移动相机库(进入viewDidAppear(在viewDidLoad中之前)。

我的想法是iOS版以同样的方式不会自动版式相机预览视图正常UIViews,等

@interface ApplicationRecordingViewController() { 
    SCRecorder *_recorder; 
} 
@end 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    _recorder.previewView = _previewView; 
}