我试图以编程方式创建一个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)。当我手动复制代码时,我犯了这些错误,我没有复制和粘贴代码;塔的就是为什么让他们,这就是为什么原来的代码编译以及
感谢您的回答安德鲁麦金利,我做你的建议我,这些是我的发现:2)当我只测试与固定大小(CGRectMake(100,100,100,100))的pview并将其添加到self.view它的作品! b)当我只创建具有固定大小(CGRectMake(100,100,100,100))的堆栈视图并将其添加到self.view时,它不起作用,并且我已经检查过其大小为100宽度和100高度在viewDidAppear中。您提到的错字不在原始代码中,我编辑该问题以修复该错误。你能给我吃什么好吗? – Airel
@Airel你能在Capture View Heirachy中看到它吗?在viewDidAppear它有一个superview,== self.view?请注意,我们不应该在此处添加pView。我们只是检查是否UIStackView已经添加到viewController –
我已经在Capture View Hierarchy中看到堆栈,并且它的superview是self.view。我将使用相同的方法来检查Pview是否已正确添加到StackView的ArrangedSubviews数组中[stack addArrangedSubview:pView]; – Airel