【问题标题】:Why we will get "Could not load quick look data for "" in iOS?为什么我们会在 iOS 中收到“无法为“”加载快速查看数据?
【发布时间】:2018-02-09 16:37:58
【问题描述】:

虽然我将 subView 添加到 containerview。

containerView的打印说明:

<UIView: 0x7fd800b0a1a0; frame = (0 0; 0 0); layer = <CALayer: 0x6040006251e0>

为什么我的视图框架为 (0 0; 0 0)

UIView* containerView = [UIView new];
containerView.translatesAutoresizingMaskIntoConstraints = NO;
[containerView addSubview:contentView];

[containerView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-15-[contentView]-15-|" options:0
metrics:nil views:NSDictionaryOfVariableBindings(contentView)]];

[containerView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|[contentView]-15-|" options:0
metrics:nil views:NSDictionaryOfVariableBindings(contentView)]];

【问题讨论】:

  • 以上代码在你的UIViewController/UIView生命周期中的什么位置?与此相关的断点在哪里?

标签: ios objective-c xcode uikit


【解决方案1】:

您创建了零帧视图。使用其他初始化器:

UIView *containerView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, w, h)];

但是在您将视图添加为子视图后,它的框架仍然是错误的。右框架将在viewDidLayoutSubviews(用于 ViewController)或layoutSubviews(用于 View)之后

【讨论】:

    【解决方案2】:

    编辑:

    containerView 尚未添加到视图中,在找到类似父视图之前不向其添加子视图是合乎逻辑的

     [self.view addSubview:containerView]
    

    您的问题是您试图将一个视图 (contentView) 约束到另一个尚不知道其位置的 (containerView)

    UIView* containerView = [UIView new];
    

    改成这个

    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,35)];
    

    始终当您以编程方式创建视图时,父视图已准备好向其添加子视图并在它们之间挂钩约束的布局

    VC启动时也以编程方式创建的约束只能在viewDidLayoutSubviews中

    -(void)viewDidLayoutSubviews
    {
        if(Once)
        { 
           // Add constraints here
           Once = NO
           [self.view layoutIfNeeded];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多