在 iPad 上以编程方式添加子视图,硬编码

Posted

技术标签:

【中文标题】在 iPad 上以编程方式添加子视图,硬编码【英文标题】:Adding subviews programmatically on iPad, hard coding 【发布时间】:2010-06-04 02:09:52 【问题描述】:

我在我的应用程序中添加了一个自定义状态栏来监控上传进度。这在纵向模式下可以正常工作,但是当我处于横向模式并且我的自定义状态栏出现时,它总是出现在主页按钮的另一侧。我认为这是因为我对我的框架进行了硬编码。

我已将 XIB 文件设置为自动调整其长度。

看看:

-(void) animateStatusBarIn 
    float x = window.frame.origin.x;
    float y = window.frame.origin.y;
    float height = 20;
    float width = window.frame.size.width;
    CGRect statusFrame = CGRectMake(x, y-20, width, height);
    iPadUploadStatusBar *statusView = [[iPadUploadStatusBar alloc] initWithNibName:@"iPadUploadStatusBar" bundle:nil];

    self.status = statusView;

    [statusView release];

    status.view.frame = statusFrame;
    [window addSubview:status.view];

    [UIView beginAnimations:@"slideDown" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    statusWindow.frame = CGRectMake(0.0f, 0.0f, 1024.0f, 20.0f);    
    [UIView commitAnimations];

在纵向上一切都很好,但就像我说的,它总是决定新的状态栏应该与主页按钮相反。

顺便说一句,这是在 AppDelegate.m 中,所以我使用的是默认 appDelegate 文件中的现有窗口

【问题讨论】:

【参考方案1】:

首先,您从哪里调用 -animateStatusBarIn 方法?

当发生旋转时,您不必为iPadUploadStatusBar 的视图设置框架(以防您在每次方向改变时调用方法animateStatusBar)。

您所要做的就是在iPadUploadStatusBar nib 中正确设置视图的自动调整大小掩码,并将其作为子视图添加到窗口或已经是窗口子视图的viewController 的视图。旋转及其动画都是自动为您处理的。

【讨论】:

我从上传已开始的 NSNotification 调用 animateStatusBarIn。它不会在视图旋转时被调用。问题是,框架始终是一个长方形,与主页按钮相对并垂直。所以在纵向模式下,这很好,但在横向模式下,它在屏幕的一侧朝上和朝下。我将视图设置为在 IB 中调整其宽度,并且 viewController 支持所有方向 我已经通过编写示例确认旋转消息仅发送到视图已添加到窗口的第一个视图控制器。因此,您在 -animateStatusBarIn 方法中将视图添加到窗口,这显然不是窗口中的第一个 viewController 视图,因此它没有获得旋转事件。有关更多详细信息,请查看此问题的已接受答案:***.com/questions/548142/… 您的解决方案是在主视图控制器中为状态栏保留单独的空间,并在那里添加“iPadUploadStatusBar”子视图。

以上是关于在 iPad 上以编程方式添加子视图,硬编码的主要内容,如果未能解决你的问题,请参考以下文章

Django将硬编码的href链接添加到管理模型的表单视图页面

以编程方式使用自动布局约束在视图中垂直对齐中间的子视图

替代视图中的硬编码网址

无法连接到 IB 中的子视图

在 IN 子句中使用硬编码值和子查询

以编程方式从文件夹中导入 Vue 组件,而不是硬编码(我实际上使用的是 Nuxt,但我将其称为 Vue)