以编程方式将UIView置于任何方向的标签栏上方

时间:2012-01-24 12:46:47

标签: iphone interface-builder autoresize autoresizingmask

我有一个UIView,我希望在UITabBar上方以纵向和横向方向对齐。我想以编程方式执行此操作。

这就是我在UIView子类中的所有内容IPChatTextView

/* Initialization */
- (id)init
{
    if (self = [super init])
    {
        // Set frame
        self.frame = CGRectMake(0, 0, 320, 40);

        // Create background
        UIEdgeInsets insetsBackground = UIEdgeInsetsMake(20, 50, 19, 82);
        UIImage *imageBackground = [[UIImage imageNamed:@"ChatTextView_Background.png"] resizableImageWithCapInsets:insetsBackground];
        UIImageView *imageViewBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
        imageViewBackground.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        imageViewBackground.image = imageBackground;

        // Add subviews
        [self addSubview:imageViewBackground];
    }

    return self;
}

图像视图imageViewBackground应该填满整个UIView,因此我将它的自动调整模板设置为UIViewAutoresizingFlexibleWidth。这很好。

初始化视图时,我设置了自动调整遮罩。

self.chatTextView = [[IPChatTextView alloc] init];
self.chatTextView.frame = CGRectMake(0, 327, 320, 40);
self.chatTextView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
[self.view addSubview:self.chatTextView];

我尝试在界面生成器中添加一个UIView并设置它的自动调整蒙版,如下图所示,它完美无缺。

Autoresizing in Interface Builder

我认为当我想要像上面的图像一样进行自动调整时,我会按照下面的代码以编程方式进行,但它不会给我相同的结果。相反,它位于距离顶部约2/3处,这似乎很奇怪,因为我将self.chatTextView的y位置设置为327,它位于标签栏的正上方。

self.chatTextView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

当我希望视图在纵向和横向方向上位于标签栏上方时,是否有人知道如何设置自动调整遮罩?

修改

如果我将自动调整模板更改为包含UIViewAutoresizingMaskFlexibleBottomMargin而不是UIViewAutoresizingMaskFlexibleTopMargin,则视图会在纵向模式下在标签栏上方对齐,但在横向模式下会退出屏幕。

1 个答案:

答案 0 :(得分:0)

当检测到旋转时,我最终以编程方式定位它。