UIViewAutoresizingFlexibleLeftMargin,参考iOS上的Superview

时间:2013-05-10 04:56:19

标签: ios autoresizingmask

我正在动态地向表单中的字段添加错误图标,如下所示:

error icon

我在代码中生成了图标,我想将其放在超级视图的右上角上,但我无法将其放在我想要的位置。屏幕截图显示了它如何保持在左侧,但它应该在右侧。

这是我的代码:

//Create the image
UIImageView *errorIcon =[[UIImageView alloc] initWithFrame:CGRectMake(-10,-10,23,23)];

//Set the image file
errorIcon.image = [UIImage imageNamed:@"error.png"];

//Tell the image to position it on the top-right (flexible left margin, flexible bottom margin)
errorIcon.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin;

无论我将框架的x值设置为什么,我都无法将其固定在右侧。

我对frame和/或autoResizingMask

做错了什么?

2 个答案:

答案 0 :(得分:1)

只有在调整视图或超级视图大小时才会启用自动调整规则,而不是设置初始位置。此外,您的错误图标来源(-10, -10)正好在左上角之外。你可能需要的只是:

UIImageView *errorIcon = [[UIImageView alloc] initWithImage:errorImage];
errorIcon.center = CGPointMake(yourFieldView.frame.size.width, 0);
[yourFieldView addSubview:errorIcon];

答案 1 :(得分:1)

你的问题就在这一行:

UIImageView *errorIcon = 
    [[UIImageView alloc] initWithFrame:CGRectMake(-10,-10,23,23)];

这意味着超级视图的左上角。如果那不是你想放的地方,不要把它放在那里!

右上角是:

UIImageView *errorIcon = 
    [[UIImageView alloc] initWithFrame:
        CGRectMake(superview.bounds.size.width-10,-10,23,23)];

(对于superview替换对将成为超级视图的视图的引用。)