我是一个非常新的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];
答案 0 :(得分:5)
如果您真的想要,可以在代码中完成所有操作。但是,使用.NIB和故事板的原因是它通常更快。我个人使用两者的组合。当我在故事板中做一些容易做的事情时,我会使用故事板。如果我需要添加动态变化的东西,我经常以编程方式进行。我认为通过避免使用Storyboards和NIB文件,你最终不得不重新发明轮子,至少对我来说,完成一个程序可能需要更长的时间,然后学习如何在任何特定情况下使用最好的工具。