以编程方式添加的uiview未显示

时间:2017-02-03 18:37:39

标签: ios objective-c layout uiview

我试图以编程方式创建一个uiview并将其添加到stack_view中,该堆栈视图也是以编程方式创建并添加到视图中的。 这是代码:

.h

@interface ViewController : UIViewController

@property (strong, nonatomic, nullable) UIStackView * stack;

@end

.m

@implementation viewController

@synthesize stack;

- (void) viewDidLoad {
  [super viewDidLoad];
  CGRect * vframe = self.view.frame;

  // - Option 1
  stack = [[UIStackView alloc] initWithFrame:CGRectMake(vframe.origin.x, 100,vframe.size.width,300)];
  stack.axis = UILayoutConstraintAxisHorizontal;
  stack.aligment = UIStackViewAligmentTop;
  stack.distribution = UIStackViewDistributionFill;
  [self.vew addSubview:stack];

  // Option 2
  // stack.traslateAutorezisingMaskIntoConstraints = NO;
  // [stack.leadingAnchor constraintsEqualToAnchor: self.view.leadingAnchor].active = YES;
  // [stack.topAnchor constraintsEqualToAnchor: self.view.topAnchor constant: 100].active = YES;

  UIView * pView = [[UIView alloc] init];
  pView.backgroundColor = [UIColor blueColor];
  [stack addArrangedSubview:pView];
}

@end

这段代码根本没有显示视图,我试图证明选项2(在代码中出现了注释)并且它也不起作用。在插入堆栈时,视图不应该得到堆栈的大小,因为它的分布是"填充"?。即使我用例如frame=CGRectMakeRect(0,0,self.view.frame.size.width,100)定义Pview,这一切也都无效。

我做错了什么?

编辑:我已经修复了代码中的拼写错误(CGRect中的*和self.vew而不是self.view)。当我手动复制代码时,我犯了这些错误,我没有复制并粘贴代码;这就是为什么要制作它们以及原始代码编译好的原因

2 个答案:

答案 0 :(得分:0)

CGRect vframe = self.view.frame;

viewDidLoad中,您的self.view.frame尚未计算。您需要在viewDidLayoutSubviewsviewDidAppear中执行此操作。这两个都会被多次调用,所以要小心。

修改
正如下面danh所建议的那样(我忽略了它)你应该从上面的行中删除*,同样,你的代码中有几个拼写错误,不知道这些代码是如何为你编译的。

答案 1 :(得分:0)

要诊断第一次测试pView。使用CGRectMake(100,100,100,100)这样的固定大小初始化,并将其直接添加到viewContoller's视图中。如果你没有更深层次的问题,你应该能够看到没问题。

如果情况良好,请尝试使用固定大小的UIStackView。如果需要,可以更好地查看背景。如果你仍然没有看到它,那么仔细检查它仍然在viewDidAppear的{​​{1}}中有正确的框架。它可能在创建后自行调整。如果这是正确的,请在模拟器中将其放入Xcode后的viewController Heirachy。如果您没有在那里看到它,那么将其添加为子视图时会出现问题(请注意拼写错误Debug -> View Debugging -> Capture View;)

如果情况良好,那么[self.vew addSubview:stack]就会出现问题。与上一步类似,循环遍历[stack addArrangedSubview:pView] UIStackView viewDidAppear中所有已排列的视图。