Autoresizingmask 无法正常工作

Posted

技术标签:

【中文标题】Autoresizingmask 无法正常工作【英文标题】:Autoresizingmask is not working correct 【发布时间】:2014-09-20 12:09:04 【问题描述】:

我以编程方式在屏幕上放置了一个带有框架 (0, 100, 50, 50) 的 UIView,并将其 autoresizingMask 设置为 UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin 并且当我开始旋转屏幕时,由于某种原因,视图会停留在右边缘。如果我设置视图框架(20、100、50、50)一切正常。

我做错了什么?

示例代码:

- (void)viewDidLoad

    [super viewDidLoad];
    UIView *cell = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 50, 50)];
    cell.backgroundColor = [UIColor blackColor];
    cell.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
                            UIViewAutoresizingFlexibleLeftMargin;
    [self.view addSubview:cell];

- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskAll;

旋转前:

 --------------------------- 
|                           |
|=====                      |
||   |                      |
|=====                      |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
-----------------------------
|             o             |
 --------------------------- 

旋转后一切都不好了:

 ------------------------------------------------
|                                            |   |
|                                       =====|   |
|                                       |   ||   |
|                                       =====|   |
|                                            |   |
|                                            | o |
|                                            |   |
|                                            |   |
|                                            |   |
|                                            |   |
|                                            |   |
 ------------------------------------------------

 --------------------------- 
|                           |
|                      =====|
|                      |   ||
|                      =====|
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
-----------------------------
|             o             |
 --------------------------- 

如果我改变了

UIView *cell = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 50, 50)];

UIView *cell = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 50, 50)];

旋转前:

 --------------------------- 
|                           |
|   =====                   |
|   |   |                   |
|   =====                   |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
-----------------------------
|             o             |
 --------------------------- 

旋转后一切正常:

 -------------------------------------------------
|                                             |   |
|   =====                                     |   |
|   |   |                                     |   |
|   =====                                     |   |
|                                             |   |
|                                             | o |
|                                             |   |
|                                             |   |
|                                             |   |
|                                             |   |
|                                             |   |
 -------------------------------------------------

 --------------------------- 
|                           |
|   =====                   |
|   |   |                   |
|   =====                   |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
-----------------------------
|             o             |
 --------------------------- 

【问题讨论】:

您希望原始 x=0 帧发生什么? 当我将设备转回纵向时,至少视图必须回到初始位置。而且我不明白为什么视图会停留在右边缘? 【参考方案1】:

试试这个:

cell.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
                        UIViewAutoresizingFlexibleBottomMargin;

【讨论】:

以上是关于Autoresizingmask 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

jPlayer 在 FF5 中无法正常工作

django - 自定义过滤器无法正常工作

对于 UITableView.tableHeaderView 的子视图,autoresizingMask 未按预期工作

au为啥加载音频错误

GoogleJsonWebSignature ValidateAsync JWT 无效

iOS -- autoResizingMask使用(转)