UIView的autoresizingMask属性

开发中用xib创建view,设置frame可能无效。问题出在autoresizing上,即使加了autolayout约束也会出现问题。解决方法有多种,如设置autoresizingMask为UIViewAutoresizingNone,在viewcontroller或DoAndCheckHomefooterView.m文件中重新设置尺寸等,还可去掉autoresizing中间两条线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中有时会碰到xib 创建view,设置view的frame会无效或者不是我们所设置的尺寸:

解决方法:

方法一:

_doAndCheckHomefooterView.autoresizingMask = UIViewAutoresizingNone;

方法二:

在viewcontroller中重新设置尺寸:

- (void)viewDidLayoutSubviews{

    self.doAndCheckHomefooterView.frame = CGRectMake(0, SCREEN_HEIGHT - footerView_H-300, SCREEN_WIDTH, footerView_H);

}

方法三:在DoAndCheckHomefooterView.m 文件中设置设置啊:

- (void)layoutSubviews{

    CGRect rect = self.frame;

    [self setFrame:rect];

    [super layoutSubviews];

}

 

方法四:(未测试,网上看到,做笔记使用)

作者:PaulPaulBoBo
链接:https://www.jianshu.com/p/36fe429757d3

 

使用Xib创建视图可以很高效的完成,但是有时也会有问题。

问题

在初始化Xib视图时给视图的frame赋值,发现并没有改变视图的大小,你可能会猜想,是不是没有加约束?

问题不是出在加约束上面,而是约束加错了,这个错误是在创建时系统就已经加好了。

约束分两种,autolayout和autoresizing,我们一般会选择autolayout来约束控件,但是,即使加上autolayout,问题还是会出现。
问题出在了autoresizing上,先看下图

 

此时查看视图的autoresizing是下面这种情况:

 


但是既然是自定义视图,就要修改视图的尺寸,所以下面这个属性的设置是必须的


设置完这个属性,我们再回过来看autoresizing

UIViewAutoresizingFlexibleLeftMargin--自动调整view与父视图左边距,以保证右边距不变
UIViewAutoresizingFlexibleWidth--自动调整view的宽度,保证左边距和右边距不变
UIViewAutoresizingFlexibleRightMargin--自动调整view与父视图右边距,以保证左边距不变
UIViewAutoresizingFlexibleTopMargin--自动调整view与父视图上边距,以保证下边距不变
UIViewAutoresizingFlexibleHeight--自动调整view的高度,以保证上边距和下边距不变
UIViewAutoresizingFlexibleBottomMargin--自动调整view与父视图的下边距,以保证上边距不变
这6个枚举值分别对应图中的6条线,
第1个枚举值对应的是右边的“|-|”
第2个枚举值对应的是中间的“<->”
第3个枚举值对应的是左边的“|-|”
第4个枚举值对应的是下边的“|-|”
第5个枚举值对应的是中间边竖着的“<->”
第6个枚举值对应的是上边的“|-|”

当这6条线都加上去的时候问题就出现了。

解决方案是

将中间的两条“<->”去掉。

autoresizing 的详解
参考这里




 

 

### 在 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`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wumu_Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值