1

我是一个相当新的 iOS 开发人员。我喜欢 AutoLayout 和程序化 UI 元素。NSLayoutConstraints 的使用对我来说非常有意义,而调整它们的值的地方就在代码中。

然而,我可以在网上找到的几乎所有关于创建 iOS UI 元素的信息都使用 XIB 或 Storyboard。有很多关于何时使用其中一个或另一个的讨论,包括在 SO 上,但我似乎找不到任何关于为什么有人可能想要跳过它们,而只是在代码中完成这一切。

我在这里缺少一些基本的东西吗?

例如,这是我的代码片段。我不能在没有 XIB 或情节提要的情况下继续这种方式吗?

    UIView *overlayView = [[UIView alloc] initWithFrame:[self getScreenFrameForCurrentOrientation]];
    overlayView.opaque = NO;
    mHighlightImagePicker.cameraOverlayView = overlayView;

    CGSize screenSize = [[UIScreen mainScreen] bounds].size;        
    float cameraAspectRatio = 4.0 / 3.0;
    float imageWidth = floorf(screenSize.width * cameraAspectRatio);
    float scale = ceilf(((screenSize.height - 90) / imageWidth) * 100.0) / 100.0;
    mHighlightImagePicker.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);

    mCameraToolBar=[[UIImageView alloc] init];
    mCameraToolBar.image =[UIImage imageNamed:@"review_bottom_bar"];
    mCameraToolBar.userInteractionEnabled = YES;
    mCameraToolBar.hidden = NO;        
    [mCameraToolBar setTranslatesAutoresizingMaskIntoConstraints:NO];
    [overlayView addConstraint:
     [NSLayoutConstraint constraintWithItem:mCameraToolBar
                                  attribute:NSLayoutAttributeTop
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:overlayView
                                  attribute:NSLayoutAttributeBottom
                                 multiplier:1
                                   constant:-70]];
    [overlayView addConstraint:
     [NSLayoutConstraint constraintWithItem:mCameraToolBar
                                  attribute:NSLayoutAttributeLeft
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:overlayView
                                  attribute:NSLayoutAttributeLeft
                                 multiplier:1
                                   constant:0]];
    [overlayView addConstraint:
     [NSLayoutConstraint constraintWithItem:mCameraToolBar
                                  attribute:NSLayoutAttributeRight
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:overlayView
                                  attribute:NSLayoutAttributeRight
                                 multiplier:1
                                   constant:0]];
    [overlayView addConstraint:
     [NSLayoutConstraint constraintWithItem:mCameraToolBar
                                  attribute:NSLayoutAttributeBottom
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:overlayView
                                  attribute:NSLayoutAttributeBottom
                                 multiplier:1
                                   constant:0]];
    [overlayView addSubview:mCameraToolBar];
4

1 回答 1

5

如果你真的想的话,你可以用代码来做这一切。然而,使用 .NIB 和故事板的原因是它通常更快。我个人使用两者的组合。当我做一些在故事板中很容易做到的事情时,我会使用故事板。如果我需要添加一些动态变化的东西,我经常以编程方式进行。我认为通过避免使用 Storyboards 和 NIB 文件,你最终不得不重新发明轮子,至少对我而言,完成一个程序可能需要更长的时间,然后才学习如何在任何给定情况下使用最好的工具。

于 2013-06-05T18:20:57.667 回答