我正在使用自动布局。
我以编程方式将一个scrollview添加到uiview,如下面的代码所示。我试图在视图中运行initShopView加载,但它只是不工作,并没有添加scrollview进行查看。我看到了视图层次结构捕获。
class variables:
@property(strong,nonatomic) UIScrollView *shopScrollView;
@property(strong,nonatomic) UIView *headView;
@property(strong,nonatomic) UIButton *favoriteButton;
- (void)viewDidLoad {
[super viewDidLoad];
[self initShopView];// not work
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self initShopView];// will work
}
-(void)initShopView{
self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.superview.frame.size.height - slideTitleHeight)];
self.shopScrollView.contentSize = CGSizeMake(self.view.frame.size.width, 800);
self.headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)];
self.favoriteButton = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width - 60, 10, 55, 55)];
[self.favoriteButton setTitle:@"Favorite" forState:UIControlStateNormal];
[self.favoriteButton setImage:[UIImage imageNamed:@"favoriteGreen.png"] forState:UIControlStateNormal];
[self.headView addSubview:self.favoriteButton];
[self.shopScrollView addSubview:self.headView];
[self.view addSubview:self.shopScrollView];
}
@Phillip Mills提供解决方案。我的滚动视图框架是
self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.superview.frame.size.height - slideTitleHeight)];
解决方案是:
self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - slideTitleHeight)];
答案 0 :(得分:3)
在viewDidLoad
中,您的视图没有superview
,因为它尚未插入到视图层次结构中。这意味着您要为滚动视图设置零高度。
如果您使用Xcode的视图调试,您将在列表中看到滚动视图,但框架“错误”。
答案 1 :(得分:0)
这是viewDidAppear
方法中的b'coz,您将获得视图的实际布局(帧)。
要在viewDidLoad中工作,您需要在[self initShopView];
方法之上调用这些方法。
[self setNeedsLayout];
[self layoutIfNeeded];
注意:使用autolayout时,建议不要设置视图。您只需要提供约束来查看以将其置于正确的位置。
答案 2 :(得分:0)
使用AutoLayout设置视图,而不是创建框架。它将在viewDidLoad中工作。 框架使视图呈现更复杂,并且无法在所有设备尺寸上正常工作。