Ios 为什么我的UIView(从UIViewController加载)的大小是nul、CGSizeZero、零、,。。。? 形势
我将视图(由视图控制器加载)添加到另一个视图。添加后,视图的Ios 为什么我的UIView(从UIViewController加载)的大小是nul、CGSizeZero、零、,。。。? 形势,ios,uiview,uiviewcontroller,xib,Ios,Uiview,Uiviewcontroller,Xib,我将视图(由视图控制器加载)添加到另一个视图。添加后,视图的大小等于(0,0)。我不明白为什么,我想知道 我知道如何解决这个问题(使用约束,或者使用view.translatesAutoResizezingMASKINTOCONSTRAINTS=YES自动创建约束,或者手动创建约束) 我真正想要的是理解为什么,在这种情况下,它没有 工作 代码 我的主视图控制器的代码 @interface ViewController () @property (weak, nonatomic) IBOutlet
大小
等于(0,0)
。我不明白为什么,我想知道
我知道如何解决这个问题(使用约束,或者使用view.translatesAutoResizezingMASKINTOCONSTRAINTS=YES自动创建约束,或者手动创建约束)
我真正想要的是理解为什么,在这种情况下,它没有
工作
代码
我的主视图控制器的代码
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *mainView;
@property (nonatomic, strong, readwrite) ColorViewController * colorVC ;
@end
@implementation ViewController
+ (void)fillView:(UIView *)bigView
withView:(UIView *)view
{
view.translatesAutoresizingMaskIntoConstraints = NO ;
// view.translatesAutoresizingMaskIntoConstraints = YES ;
view.frame = bigView.bounds ;
[bigView addSubview:view] ;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.colorVC = [ColorViewController new] ;
[ViewController fillView:self.mainView
withView:self.colorVC.view] ;
}
@end
关联的故事板
Capture d'cran 2015-04-30á17.25.32.png
ColorViewController的代码
@implementation ColorViewController
- (void)viewDidLoad {
[super viewDidLoad];
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
self.view.backgroundColor = color ;
}
@end
其XIB
日志
如果我记录视图(属于ColorViewController
),我会得到:
2015-04-30 17:33:58.329测试子视图[51745:602214]
最奇怪的事情
- 这方面真正奇怪的是,如果我删除了上述XIB中唯一的对象(UILabel
),那么一切都会正常工作
[UIView new]
创建视图,然后使用相同的方法将其添加到“主视图”,那么一切都可以正常工作在您的情况下,最好不要在代码中对
TranslatesAutoResizezingMaskinToConstraints
说任何话,因为您没有对视图应用任何显式约束,因此您会得到从框架派生的隐式约束,这正是您想要的。或者,您可以完全关闭自动布局-它在两个NIB中都打开。我不理解您的代码。你为什么要制作newView
,然后把它扔掉?什么是self.mainView
?它与self.view
相同吗?对不起,newView
没有用,我会删除它self.mainView
是故事板中的IBoutlet
<代码>自我。视图完全不相关。它属于ColorViewController
。是的,知道了(通过查看github项目,最好把它放上去)当你将一个视图控制器的视图嵌入到另一个视图控制器中时,你需要告诉两个视图控制器-以便将适当的布局/触摸相关消息转发给孩子。请参阅中的“实现自定义容器视图控制器”,您将一个VC的视图作为另一个VC的子视图,因此我认为您需要使用该文档中描述的addChildViewController
和didMoveToParentViewController
类型切换。确定,但是,您如何解释,如果您从ColorViewController
的XIB
中删除UILabel
,那么它会起作用呢?顺便问一下,您知道一些好的文档,解释有关TranslatesAutoResizengMackinToConstraints
的内容吗?谢谢在我的回答中添加了更多关于标签的内容。我确实知道关于自动布局的一个很好的解释,但谦虚使我无法提及它。:)这意味着你是一名苹果开发人员并创建了这个系统?
2015-04-30 17:33:58.329 TEST_SUBVIEWS[51745:602214] <UIView: 0x7b4191e0; frame = (-179 -236; 0 0); autoresize = RM+BM; layer = <CALayer: 0x7b418ce0>>
view.translatesAutoresizingMaskIntoConstraints = NO ;
view.translatesAutoresizingMaskIntoConstraints = YES;