2017-02-03 40 views
0

我试图以编程方式创建一个uview,并将其添加到编程方式创建并添加到视图中的stack_view。 这是代码:以编程方式添加uiview不显示

的.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)。当我手动复制代码时,我犯了这些错误,我没有复制和粘贴代码;塔的就是为什么让他们,这就是为什么原来的代码编译以及

回答

0

要诊断此问题,首先测试pView。初始化它像一个固定的大小,如CGRectMake(100,100,100,100),并将其直接添加到viewContoller's视图。如果不是你有更深的问题,你应该能够看到它没有问题。

如果顺利的话,尝试UIStackView与固定的大小。如果需要,可以将其背景着色为更好看。如果你仍然没有看到它,然后仔细检查它仍然有viewControllerviewDidAppear正确的框架。它可能在创建后自行调整。如果这是正确的,请在模拟器中启动Xcode后进入Debug -> View Debugging -> Capture View Heirachy。如果你没有看到它,那么有一个问题添加它作为子视图(注意错字[self.vew addSubview:stack];)

如果这样顺利,那么有一个[stack addArrangedSubview:pView]问题。与上一步类似,请在UIStackViewviewControllerviewDidAppear中循环所有已排列的子视图。

+0

感谢您的回答安德鲁麦金利,我做你的建议我,这些是我的发现:2)当我只测试与固定大小(CGRectMake(100,100,100,100))的pview并将其添加到self.view它的作品! b)当我只创建具有固定大小(CGRectMake(100,100,100,100))的堆栈视图并将其添加到self.view时,它不起作用,并且我已经检查过其大小为100宽度和100高度在viewDidAppear中。您提到的错字不在原始代码中,我编辑该问题以修复该错误。你能给我吃什么好吗? – Airel

+0

@Airel你能在Capture View Heirachy中看到它吗?在viewDidAppear它有一个superview,== self.view?请注意,我们不应该在此处添加pView。我们只是检查是否UIStackView已经添加到viewController –

+0

我已经在Capture View Hierarchy中看到堆栈,并且它的superview是self.view。我将使用相同的方法来检查Pview是否已正确添加到StackView的ArrangedSubviews数组中[stack addArrangedSubview:pView]; – Airel

0
CGRect vframe = self.view.frame; 

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

编辑
正如danh(我忽略了它),你应该从上面的行删除*,此外,你必须在你的代码的几个拼写错误,不知道这个代码真的怎么连编译如下建议您。

+1

将CGRect结构赋给CGRect *可能不会编译。不知道它如何进入OP。 – danh

+0

@danh是的,你是对的,我一味地忽略它。另外,我注意到他现在有几个拼写错误:“[self.vew addSubview:stack];”在他的问题中,不知道如何为他编译的确如此。 – 2017-02-03 18:59:08

+0

感谢丹,我的坏...我已经编辑了这个问题,这些错误不是在原来的代码...谢谢老兄 – Airel

相关问题