我试图添加一个UINavigationController作为子视图控制器,然后给它一个比其父级更小的框架.然而,改变导航控制器的框时不正确地改变导航控制器的根视图控制器的帧.
在 viewDidLoad
RootController *rootController = [[RootController alloc] init];
_navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[rootController release];
[self addChildViewController:_navController];
[self.view addSubview:_navController.view];
[_navController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
然后,在viewWillAppear::
CGRect bounds = self.view.bounds;
bounds.origin.x = 20;
bounds.origin.y = 20;
bounds.size.width = bounds.size.width - 20;
bounds.size.height = bounds.size.height - 20;
_navController.view.bounds = bounds;
Run Code Online (Sandbox Code Playgroud)
导航栏放置正确时,根视图控制器的白色背景不是.我究竟做错了什么?谢谢你的帮助.

我在做一件相当简单的事情时遇到了一些困难,我错过了一些但却看不到......
我用一个非常简单的应用程序(使用IB)重现了这个问题:
问题是如果我通过"ChildViewControllers"方法显示SecondViewController,它在我的iPhone4上出错:我没有看到底部标签.
// In FirstViewController.m
- (IBAction)child:(id)sender {
[self addChildViewController:self.secondVC];
[self.view addSubview:self.secondVC.view];
[self.secondVC didMoveToParentViewController:self];
}
Run Code Online (Sandbox Code Playgroud)
如果我通过NavigationController显示"SecondViewController",一切都很好,SecondViewController正确显示.
// In FirstViewController.m
- (IBAction)push:(id)sender {
[self.navigationController pushViewController:self.secondVC animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
此外,只要SecondViewController通过NavigationController显示一次,它就会始终显示良好.
我肯定错过了什么,但是什么?:p你有什么想法吗?
我在dropbox上载了简单项目:https://dl.dropbox.com/u/36803737/sharebox/AutoLayoutTest.zip
谢谢!
朱利安
我想在添加子视图时禁用导航栏,并在删除子视图后再次启用它。怎么做。显示操作表时的类似操作。
uinavigationbar uinavigationcontroller ios childviewcontroller ios7
我一直在关注XLpagerTabStrip cocoapods扩展,在我的视图控制器顶部设置一个标签栏(https://github.com/xmartlabs/XLPagerTabStrip).我正在实现ButtonBarPagerTabStripViewController并完全按照步骤,但UIScrollView不显示子视图控制器.
我认为这是因为在示例中,子视图控制器是以编程方式而不是在故事板中设置的,而我的当前设置在故事板中,因此没有显示任何内容,但我无法看到连接子视图通过故事板查看ButtonBarController的控制器.
有没有办法使用故事板显示子视图控制器,还是必须以编程方式完成?
GitHub页面表示要实现以下功能(但是如果您的子视图控制器是通过故事板设置的,那么这似乎不起作用):
override public func viewControllersForPagerTabStrip(pagerTabStripController: PagerTabStripViewController) -> [UIViewController]
{
return [MyChildViewController(), MySecondChildViewController()]
}
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的场景,对我不起作用.我有一个带两个视图控制器的故事板:
ViewController1
- ViewA
- ViewB
ViewController2
- ViewC
Run Code Online (Sandbox Code Playgroud)
我ViewController1正在按预期工作,当我旋转设备时,视图会根据我定义的自动布局正确调整.
我ViewController2的自由格式大小(768x722),我取消选中"从笔尖调整视图大小"选项.
这是我的 ViewController1 didLoad
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc2 = [story instantiateViewControllerWithIdentifier:@"vc2"];
[self addChildViewController:vc2];
[vc2 didMoveToParentViewController:self];
[self.viewA addSubview:vc2.view];
}
Run Code Online (Sandbox Code Playgroud)
当我- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation从ViewControlled2被调用的方法旋转设备时,它显示正确的方向.但是,ViewC不会自行调整大小,也不会遵循我的自动布局设置.
有谁知道我怎么解决?我只是想添加我的ViewController2内部ViewA并保持自动布局工作的视图ViewController2.我只需要iOS 7的解决方案,因此不需要与早期版本兼容.
有人可以帮帮我吗?
我正在开发一个应用程序,我必须并排显示多个视图控制器(拆分视图).为此,我添加了视图作为子视图控制器.
目标:我想在一个子视图控制器上显示导航栏,同时在父视图控制器上显示单独的导航栏.
问题:导航栏不会显示在子视图控制器上.
编辑:我还将父视图控制器的导航栏设置为隐藏但是当子视图控制器被调用时,导航栏出现在父视图控制器上,而不是子视图控制器上.
添加子视图控制器的代码是:
MyChildViewController *childViewController = [[MyChildViewController alloc] initWithNibName:@"MyChildViewController" bundle:nil];
[self addChildViewController:childViewController];
[childViewController.view setFrame:CGRectMake(0.0f, 0.0f, self.rightContainerView.frame.size.width, self.rightContainerView.frame.size.height)];
[self.rightContainerView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
此代码工作正常,子视图控制器完美添加.我想知道是否有可能?
提前致谢.
uinavigationbar uinavigationcontroller ios childviewcontroller splitview
所有,
我使用的几个运行时将一些性能/内存问题ChildViewControllers在我ParentViewController.这是我的情况:我有一个ParentViewController动态数字ChildViewControllers- 有时多达20个.它们包含在a中UIScrollView,并被分页.当我在页面上有几个时,我遇到了问题(我只是加载了前两个,然后在刷卡的同时构建其他的),然而,ParentViewController由于内存的原因,开始导致一些崩溃.
其中ChildViewController有很多内容,我正在通过它来确保它尽可能高效,但是,我担心这种方法适用于旧设备(因为我在5S上遇到崩溃) .
似乎将视图控制器更改为仅视图会有所帮助,但由于VC很复杂,因此这是一项非常大的工作.我的一个建议是从现有视图控制器的视图创建一个视图,并在视图上设置多个委托方法,并以ParentViewController这种方式与视图交互.对于当前的使用方法,是否有人对该方法的效率有任何想法ChildViewControllers?
我的另一个想法是建立一个习俗,ContainerViewController并让所有的孩子都在那里轻扫,但我不确定这是否会让我比使用孩子更有优势UIScrollView.
有什么想法吗?
我创建了一个活动,当单击其中一个文本字段时,它会弹出一个带有产品列表的子项(警告对话框),但是当我单击列表中的一个项目时,一旦警报被解除,我就无法在文本字段上显示它.
这是父视图
import Foundation
import UIKit
class ViewAward: UIViewController{
@IBOutlet var tfMCN: UITextField!
@IBOutlet var tfAmount: UITextField!
@IBOutlet var tfProduct: UITextField!
@IBOutlet var tfTotal: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let rightAddBarButtonItem:UIBarButtonItem = UIBarButtonItem(title: "Send", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(ViewAward.searchTapped))
self.navigationItem.setRightBarButtonItems([rightAddBarButtonItem], animated: true)
let state = String(ViewPopUpProduct.Product.ProductDescription)
print("My view state:"+state)
self.tfProduct.text = state
tfProduct.addTarget(self, action: #selector(ViewAward.productTapped), forControlEvents: UIControlEvents.TouchDown)
}
func searchTapped(sender:UIButton) {
let alertController = UIAlertController(
title: "Award",
message:"Award successfully posted!",
preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, …Run Code Online (Sandbox Code Playgroud) 我创建了一个小项目来复制这个问题.
唯一的文件就是这个......
class RootViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
showBlue()
}
@objc func showBlue() {
let vc = UIViewController()
vc.view.backgroundColor = .blue
let nvc = UINavigationController(rootViewController: vc)
vc.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(showGreen))
transition(to: nvc)
}
@objc func showGreen() {
let vc = UIViewController()
vc.view.backgroundColor = .green
let nvc = UINavigationController(rootViewController: vc)
vc.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(showBlue))
transition(to: nvc)
}
func …Run Code Online (Sandbox Code Playgroud) 我一直在研究这个问题但是找不到我需要的东西.我想学习如何以编程方式使用子视图控制器创建容器视图.我仍然相当新,并且学习基础知识,但是从我收集的内容来看,过去常常使用可恢复的视图并在将容器视图对象添加到库之前将它们附加到子视图控制器(对吗?),我正在寻找一个教程或示例代码,显示如何从头开始,使用xib,但没有任何复杂性,如添加表格单元格等...只是容器和子程序.那有意义吗?我相信一定有什么东西谢谢你,如果你能提供帮助的话.
更新------------------------------------------------- -------------------------------------------------- -------------------我设法创建了一个带有UIButton动作的子视图控制器.相关代码:
- (IBAction)Pressed:(id)sender {
ChildViewController *childViewController = [[ChildViewController alloc]init];
[self displayContentController:childViewController];
}
- (void) displayContentController: (UIViewController*) content {
[self addChildViewController:content];
content.view.frame = CGRectMake(0, 115, 320, 240);
content.view.backgroundColor = [UIColor redColor];
CATransition *transition = [CATransition animation];
transition.duration = 1;
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[content.view.layer addAnimation:transition forKey:nil];
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];
}
Run Code Online (Sandbox Code Playgroud)
所以这很好.我点击按钮和一个红色正方形,子视图控制器,占据屏幕的一小部分出现.我想知道的是,这是最佳做法.
objective-c childviewcontroller uicontainerview programmatically-created
ios ×9
objective-c ×3
swift ×3
autolayout ×2
childviews ×2
cocoa-touch ×1
ios7 ×1
iphone ×1
orientation ×1
splitview ×1
xcode ×1