我試圖以編程方式創建一個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