Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么我的UIView(从UIViewController加载)的大小是nul、CGSizeZero、零、,。。。? 形势_Ios_Uiview_Uiviewcontroller_Xib - Fatal编程技术网

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]
    创建视图,然后使用相同的方法将其添加到“主视图”,那么一切都可以正常工作

  • 奇怪

    链接到github上的最小非工作示例

    这意味着:“使用自动布局来设置我的大小和位置。”但您没有自动布局约束,所以当布局发生时,您会变得毫无意义。因此,插入的视图永远不会出现

    您还可以询问标签的存在/不存在及其对结果的影响。它不仅仅是一个标签。它是任何子视图。这是因为子视图的存在会影响自动布局的操作方式。在没有子视图的情况下,自动布局似乎会说,“好的,这里没什么要做的”。因此,您确实在正确的位置看到了插入的视图,但这是一种意外(如果您明白我的意思,那就是愚蠢的运气)

    这意味着:使用我的框架进行约束。因此,当布局发生时,我们确实有约束,插入的视图显示在您期望的位置


    在您的情况下,最好不要在代码中对
    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;