UIView“卡在”UITabBarController视图的左上角

时间:2013-09-16 05:50:32

标签: objective-c cocoa-touch uiview positioning

我正在初始化一个加载器子视图,以匹配我用来包装我的应用程序的UITabBar的高度,宽度和位置:

// In UITabBarController implementation

LoaderView *loaderView = [[LoaderView alloc] initWithFrame:[self tabBar].viewForBaselineLayout.frame];
[[self view] addSubview:loaderView];

//
//  LoaderView.h

#import <UIKit/UIKit.h>

@interface LoaderView : UIView

@property (nonatomic, strong) UILabel *messageLabel;
@property (nonatomic, strong) NSString *message;
@property (nonatomic) CGRect frame;

- (void)createLabel;
- (void)drawLoader;
- (void)setText:(NSString *)newMessage;
- (void)show:(NSNotification *)notification;

@end

//
//  LoaderView.m

#import "LoaderView.h"

@implementation LoaderView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self drawLoader];
    }
    return self;
}

- (void)drawLoader
{
    UIColor *semiOpaqueGray = [[UIColor alloc] initWithRed:0.0f green:0.0f blue:0.0f alpha:0.8f];
    [self setBackgroundColor:semiOpaqueGray];

    [self createLabel];
}

- (void)createLabel
{
    _messageLabel = [[UILabel alloc] initWithFrame: CGRectMake(15,9,([self frame].size.width - 10), 30)];
    _messageLabel.textColor = [[UIColor alloc] initWithWhite:1.0 alpha:1];
    _messageLabel.backgroundColor = [[UIColor alloc] initWithWhite:1.0 alpha:0.0];

    [self addSubview:_messageLabel];
}

@end

frame结构表示此传入帧数据:

2013-09-16 07:48:35.552 ---[97825:a0b] {{0, 519}, {320, 49}}
// Ostensibly 0,519 origin point and 320,49 w/h

结果就是这样。可以在左上角看到大部分不透明的暗盒。看起来它正被装载机​​的中心点定位到屏幕的左上角:

Screenshot of misplaced gray box

我可以改变盒子的大小,但我似乎无法从左上角移动它。此外,我在其上设置了一个动画,该动画调整框架(从标签栏区域向下滑动)。这似乎也没有效果。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以轻轻添加loadingView您的应用程序窗口。设置loaderView的框架后。

[loadView setFrame:CGRectMake(0,0,self.frame.size.width.,self.frame.size.height)];
[self.window addSubview:loaderView];

然后加载完成。

[self.window removeSubview:loaderView];

答案 1 :(得分:0)

你的超级视图就是问题所在。如果你将它添加到你的UINavigationController,那么y轴可能不会很好地响应。尝试使用控制器的主视图

loaderView.frame = CGRectMake(x, 514, 40, 320);  // made up numbers
[self.mapView addSubview:loaderView];

此外,您正在访问tabBar。尝试使用UIDevice窗口获取宽度并从底部的标签继承高度(或在LoaderView中嵌套标签)

同时考虑实际使用UITabBar来处理这个问题。