UIView的autoresizingMask属性的使用

在iOS应用的开发过程中,经常会使用,setFrame的方式对UIView进行布局,

经常会使用计算的方式,如self.view.bounds.size.height - 20-44- Heignt等来计算Y的相对位置

我们知道上边的数字 20是status bar的高度,44是navigationBar的高度.

这样的写法没有什么错误,但是不利于代码的复用,比如一个ViewController在创建的时候,有可能有navigationController,也可能没有navigationController,在这种情况下,这个VIewController里边的子UIView的相对位置就可能出现偏差.

所以,本文主要介绍autoresizingMask属性,对UIVIew进行相对的布局。

假设如下的需求:

程序启动后,构建一个自定义的TabBar,始终显示在应用的底部,无论屏幕发生旋转,或者收到来电的情况下,都显示在应用的底部。(看起来,跟现在的很多微博客户端相似,它们多半都没有使用系统的tabbarcontroller方式,而是自己绘制的tabbar).

可以用如下的代码来实现

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tabbar = [[[CustumTabBar alloc] init] autorelease];
    [self.tabbar setFrame:CGRectMake(0, self.view.bounds.size.height -44, self.view.bounds.size.width, 44)];
    self.tabbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleWidth;
    [self.tabbar setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:self.tabbar];
}


代码中,autoresizingMask设置为底部和宽度对齐,加上shouldAutorotateToInterfaceOrientation方法返回YES后,程序无论怎样转向,TabBar都会在应用的底部显示了。

同理,如果想让一个UIVIew始终都在屏幕中心,

可以设置它的Y为 ceilf((self.view.bounds.size.height - Height)/2),

 同时设置autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin 即可。


### 在 UIView 中设置背景图片的方法 在 iOS 开发中,可以通过多种方式为 `UIView` 设置背景图片。以下是一些常见且有效的方法: #### 方法一:使用 `colorWithPatternImage` 可以利用 `UIColor` 的 `colorWithPatternImage` 方法将图片设置为 `UIView` 的背景颜色。这种方式简单直接,适合需要平铺背景图片的场景。 ```swift let paperView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 700)) paperView.backgroundColor = UIColor(patternImage: UIImage(named: "paper.png")!) // 设置背景图片[^1] ``` 这种方法会自动平铺图片以填充整个视图区域。如果希望图片保持原始比例而不被拉伸或平铺,则需要考虑其他方法。 #### 方法二:添加 `UIImageView` 子视图 通过创建一个 `UIImageView` 并将其作为子视图添加到目标 `UIView` 中,可以更灵活地控制背景图片的行为。 ```swift let backgroundImageView = UIImageView(image: UIImage(named: "paper.png")) backgroundImageView.frame = view.bounds backgroundImageView.contentMode = .scaleAspectFill // 设置内容模式以适应视图 backgroundImageView.autoresizingMask = [.flexibleWidth, .flexibleHeight] // 确保图片随视图调整大小 let paperView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 700)) paperView.addSubview(backgroundImageView) // 将UIImageView添加为子视图 ``` 此方法允许开发者对背景图片进行更多自定义操作,例如调整 `contentMode` 和 `autoresizingMask`[^1]。 #### 方法三:结合 Auto Layout 使用 当项目使用 Auto Layout 时,确保 `UIImageView` 的约束与父视图正确关联,以便图片能够适配不同屏幕尺寸。 ```swift let backgroundImageView = UIImageView(image: UIImage(named: "paper.png")) backgroundImageView.translatesAutoresizingMaskIntoConstraints = false backgroundImageView.contentMode = .scaleAspectFit let paperView = UIView() paperView.addSubview(backgroundImageView) NSLayoutConstraint.activate([ backgroundImageView.topAnchor.constraint(equalTo: paperView.topAnchor), backgroundImageView.bottomAnchor.constraint(equalTo: paperView.bottomAnchor), backgroundImageView.leadingAnchor.constraint(equalTo: paperView.leadingAnchor), backgroundImageView.trailingAnchor.constraint(equalTo: paperView.trailingAnchor) ]) ``` 这种方法适用于动态布局场景,确保背景图片在不同设备上都能正确显示[^1]。 --- ### 注意事项 - 如果背景图片较大,可能会导致内存占用增加。建议优化图片资源,例如压缩图片文件大小或使用适当分辨率的图片。 - 在设置背景图片时,需注意图片的 `contentMode` 属性,以确保图片按照预期的方式显示(如拉伸、缩放或平铺)。 - 如果背景图片是透明的,并且希望底层内容可见,应确保 `UIView` 的 `opaque` 属性设置为 `false`。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值