故事板中的自定义 UIView 不显示子视图

Posted

技术标签:

【中文标题】故事板中的自定义 UIView 不显示子视图【英文标题】:Custom UIView in storyboard not showing subviews 【发布时间】:2014-12-20 01:20:42 【问题描述】:

我创建了一个自定义 UIView 来显示 UIActivityIndi​​catorView 和一条消息。想法是在我的应用程序中重用它以保持一致性。下面是代码:

@implementation CDActivityIndicator

@synthesize activityIndicator, message;

//init method called when the storyboard wants to instantiate this view

- (id) initWithCoder:(NSCoder*)coder 

    if ((self = [super initWithCoder:coder])) 

        activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

        message = [[UILabel alloc] initWithFrame:CGRectZero];
        [message setBackgroundColor:[UIColor clearColor]];
        [message setTextColor:[UIColor whiteColor]];
        [message setTextAlignment:NSTextAlignmentCenter];
        [message setFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0f]];

        [self addSubview:activityIndicator];
        [self addSubview:message];

        //set background color
        [self setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];
    

    return self;
 

-(void) layoutSubviews 

    [super layoutSubviews];

    //position the indicator at the center of the view
    [activityIndicator setCenter:[self center]];

    //position the label
    [message setFrame:[self frame]];



- (void) begin 

    //make sure the current view is visible, and message is hidden
    [self setHidden:NO];
    [activityIndicator setHidden:NO];
    [self bringSubviewToFront:activityIndicator];
    [message setHidden:YES];

    [self performSelectorOnMainThread:@selector(startAnimating) withObject:self waitUntilDone:YES];


- (void) startAnimating 
    if( !activityIndicator.isAnimating ) 
        [activityIndicator startAnimating];
    

为了尝试这一点,我在情节提要中的一个视图中添加了一个 UIView,并将该视图的类设置为 CDActivityIndi​​cator。当我从相应的视图控制器调用 begin() 时,CDActivityIndi​​cator 显示为具有预期背景颜色的空视图。但是,活动指示器不显示。所有方法都按预期调用。

知道我可能缺少什么吗?谢谢!

【问题讨论】:

能否添加活动指示器的完整代码 【参考方案1】:

您应该像这样更改子视图框架设置。

CGPoint point = [self.superview convertPoint:self.center toView:self];
[activityIndicator setCenter:point];
[message setFrame:self.bounds];

框架定义了视图在其父视图坐标系中的原点和尺寸。每个 UIView 都有自己的坐标系。你应该考虑到这一点。

【讨论】:

完美!非常感谢@gabbler。不知道我是怎么错过的,因为我的上一个应用程序都是自定义布局,没有笔尖/故事板...脱节 :)

以上是关于故事板中的自定义 UIView 不显示子视图的主要内容,如果未能解决你的问题,请参考以下文章

故事板中的自定义表格视图单元格布局似乎无效

故事板中的自定义导航控制器

故事板约束不影响自定义 UiView 大小

如何使用故事板中定义的单元格计算集合视图单元格高度?

如何使故事板中的 UiView 尊重百分比[重复]

uiview故事板中的viewcontroller多个