如何用图像作为背景填充 iOS 堆栈视图 (UIStackView)?
How to fill iOS Stack View (UIStackView) with an image as a background?
我想为图像设置堆栈视图背景。例如,在 Android 中,如果我使用 'Linear Layout'(相当于 UIStackView),我可以将背景图像设置为 'Linear Layout',而不管我添加到其中的内容(视图)是什么。
我如何使用 XCode 来做到这一点?
你不能这样做,UIStackView 是一个 non-drawing 视图,这意味着永远不会调用 drawRect()。如果您想要背景图片,请考虑将堆栈视图放在 UIImageView 中。
如果你用代码编写 UIStackview 或许你可以试试下面的方法~
UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[scrollview layer] setContents:(__bridge id)[[UIImage imageNamed:@"your_background.jpg"] CGImage]];
[[scrollview layer] setContentsGravity:kCAGravityResizeAspectFill];
[self.view addSubview:scrollview];
UIStackView *stackview = [[UIStackView alloc] init];
[stackview setTranslatesAutoresizingMaskIntoConstraints:NO];
[stackview setAxis:UILayoutConstraintAxisVertical];
[stackview setDistribution:UIStackViewDistributionFill];
[scrollview addSubview:stackview];
NSDictionary *dic_vfl = NSDictionaryOfVariableBindings(stackview,scrollview);
NSArray *array = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[stackview(scrollview)]|" options:0 metrics:nil views:dic_vfl];
[scrollview addConstraints:array];
array = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[stackview]|" options:0 metrics:nil views:dic_vfl];
[scrollview addConstraints:array];
//add view to stackview for test
srand48(arc4random());
for(int i=0;i<50;i++){
UIColor *rc = [UIColor colorWithRed:drand48() green:drand48() blue:drand48() alpha:0.5];
UIView *view_test = [[UIView alloc]init];
[view_test setTranslatesAutoresizingMaskIntoConstraints:NO];
[view_test setBackgroundColor:rc];
[stackview addArrangedSubview:view_test];
dic_vfl = NSDictionaryOfVariableBindings(view_test);
array = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view_test]|" options:0 metrics:nil views:dic_vfl];
[stackview addConstraints:array];
array = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view_test(50)]" options:0 metrics:nil views:dic_vfl];
[stackview addConstraints:array];
}
希望这有用!!
正如上面所述的答案,您不能将图像背景添加到堆栈视图。
实现方式是添加一个UIView,然后在刚刚添加的UIView中嵌套一个ImageView和已有的stackview。此外,您需要对 imageview 应用相应的约束以适应整个背景 (0, 0 , 0 , 0)
大纲应如下所示:
我想为图像设置堆栈视图背景。例如,在 Android 中,如果我使用 'Linear Layout'(相当于 UIStackView),我可以将背景图像设置为 'Linear Layout',而不管我添加到其中的内容(视图)是什么。 我如何使用 XCode 来做到这一点?
你不能这样做,UIStackView 是一个 non-drawing 视图,这意味着永远不会调用 drawRect()。如果您想要背景图片,请考虑将堆栈视图放在 UIImageView 中。
如果你用代码编写 UIStackview 或许你可以试试下面的方法~
UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[scrollview layer] setContents:(__bridge id)[[UIImage imageNamed:@"your_background.jpg"] CGImage]];
[[scrollview layer] setContentsGravity:kCAGravityResizeAspectFill];
[self.view addSubview:scrollview];
UIStackView *stackview = [[UIStackView alloc] init];
[stackview setTranslatesAutoresizingMaskIntoConstraints:NO];
[stackview setAxis:UILayoutConstraintAxisVertical];
[stackview setDistribution:UIStackViewDistributionFill];
[scrollview addSubview:stackview];
NSDictionary *dic_vfl = NSDictionaryOfVariableBindings(stackview,scrollview);
NSArray *array = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[stackview(scrollview)]|" options:0 metrics:nil views:dic_vfl];
[scrollview addConstraints:array];
array = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[stackview]|" options:0 metrics:nil views:dic_vfl];
[scrollview addConstraints:array];
//add view to stackview for test
srand48(arc4random());
for(int i=0;i<50;i++){
UIColor *rc = [UIColor colorWithRed:drand48() green:drand48() blue:drand48() alpha:0.5];
UIView *view_test = [[UIView alloc]init];
[view_test setTranslatesAutoresizingMaskIntoConstraints:NO];
[view_test setBackgroundColor:rc];
[stackview addArrangedSubview:view_test];
dic_vfl = NSDictionaryOfVariableBindings(view_test);
array = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view_test]|" options:0 metrics:nil views:dic_vfl];
[stackview addConstraints:array];
array = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view_test(50)]" options:0 metrics:nil views:dic_vfl];
[stackview addConstraints:array];
}
希望这有用!!
正如上面所述的答案,您不能将图像背景添加到堆栈视图。
实现方式是添加一个UIView,然后在刚刚添加的UIView中嵌套一个ImageView和已有的stackview。此外,您需要对 imageview 应用相应的约束以适应整个背景 (0, 0 , 0 , 0)
大纲应如下所示: