这种视图风格可能吗?

Posted

技术标签:

【中文标题】这种视图风格可能吗?【英文标题】:Is this view style possible? 【发布时间】:2011-05-27 03:35:36 【问题描述】:

我需要这样的屏幕:始终在顶部,有一个搜索栏,始终。正下方,有一个导航控制器。这可能吗?我已经尝试在 IB 中调整导航控制器的大小,但我无法调整它的大小。谢谢。

【问题讨论】:

【参考方案1】:

是的。但是,您必须在代码中构建接口。你的主视图控制器应该有两个实例变量:第一个应该是搜索栏,第二个应该是导航控制器。然后,在-viewDidLoad 中,将搜索栏和导航控制器的视图作为子视图添加到主视图控制器的视图中。结果将如下所示:

您可以在这里下载 Xcode 项目:http://www.mediafire.com/?36dswv4u0le447k

【讨论】:

@Krishnabhadra:查看 AppShopper:itunes.apple.com/app/appshopper/id387037496?mt=8。他们的应用做同样的事情,但他们没有在导航控制器上方放置一个搜索栏,而是放置了一个广告视图。 谢谢!正是我想要的。【参考方案2】:

这并不简单,但这是可能的。你需要做的是让根视图控制器成为一个普通的视图控制器,包含一个 UIView。该视图包含搜索栏和“持有者视图”。在您将导航控制器的视图添加到窗口时,您改为将其添加到持有者视图。

我使用标准导航控制器模板创建了这个。我修改了应用委托如下:

//header

    UIWindow *window;
    UINavigationController *navigationController;
    UIViewController *rootVC;
    UIView *holderView;

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIViewController *rootVC;
@property (nonatomic, assign) IBOutlet UIView *holderView;

//implementation
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     
    UIView *temp;
    temp = navigationController.view;
    CGRect f = holderView.frame;
    f.origin = CGPointZero;
    temp.frame = f;
    [holderView addSubview:temp];
    [window addSubview:rootVC.view];
    [window makeKeyAndVisible];
    return YES;

IB 层次结构图:

【讨论】:

天哪!第一代 iPhone! @Josh 我很确定它至少是 3G,如果不是 3GS。 我以为他们有一个平坦的前挡板......哦,好吧。 @Josh 实际上,你是对的。我猜苹果只是懒得更新他们的图像(这确实解释了为什么 iPhone 4 看起来几乎与 iPad 相同)。对于任何想要自己的原始 iPhone 的人来说,这是 ios 4.0 sdk 中的模拟器。

以上是关于这种视图风格可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 风格的模糊视图

模态视图是否有可能不能在整个屏幕上填充?

模型-视图-控制器是糟糕的面向对象设计吗? [关闭]

想要在网格视图中绑定对象内的对象。这可能吗?

春季安全。不同角色的同一页面的不同视图,可能吗?

视图需要相互依赖的逻辑:没有模型可能吗?