标签: uinavigationcontroller

导航栏显示/隐藏

我有一个带有2个按钮的导航栏的应用程序.当用户双击屏幕时,我想隐藏并显示此导航栏.

最初,应隐藏导航栏.当用户双击屏幕时,导航栏应该会出现一个动画,就像iPhone的照片库中可以看到的那样.

我该怎么做呢?建议总是受到赞赏.

iphone uinavigationbar uinavigationcontroller ios

155
推荐指数
7
解决办法
20万
查看次数

UINavigationController"后退按钮"自定义文本?

默认情况下,"后退按钮"显示堆栈中最后一个视图的标题,是否有办法在后退按钮中使用自定义文本?

iphone uinavigationcontroller ios

147
推荐指数
6
解决办法
10万
查看次数

如何在iOS 8中强制查看控制器方向?

在iOS 8之前,我们将下面的代码与supportedInterfaceOrientationsshouldAutoRotate委托方法结合使用,以强制应用程序方向指向任何特定方向.我使用下面的代码段以编程方式将应用程序旋转到所需的方向.首先,我正在改变状态栏方向.然后只显示并立即关闭模态视图会将视图旋转到所需的方向.

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)

但这在iOS 8中失败了.而且,我已经看到堆栈溢出的一些答案,人们建议我们应该始终从iOS 8开始避免这种方法.

更具体地说,我的应用程序是一种通用类型的应用程序.总共有三个控制器.

  1. First View控制器 - 它应该支持iPad中的所有方向,并且只支持iPhone中的纵向(主页按钮).

  2. 第二视图控制器 - 它应该只支持所有条件下的横向

  3. 第三视图控制器 - 它应该只支持所有条件下的风景

我们使用导航控制器进行页面导航.从第一个视图控制器,在按钮单击操作上,我们在堆栈上推送第二个.因此,当第二个视图控制器到达时,无论设备方向如何,应用程序都应仅锁定横向.

下面是我shouldAutorotatesupportedInterfaceOrientations第二和第三视图控制器中的方法.

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscapeRight;
}

-(BOOL)shouldAutorotate {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

对于这种或任何更好的方法来锁定iOS 8的特定方向的视图控制器是否有任何解决方案.请帮忙!!

objective-c uinavigationcontroller autorotate ios ios8

144
推荐指数
10
解决办法
14万
查看次数

如何从推送的控制器获取RootViewController?

所以,我从RootViewController推送一个视图控制器,如:

[self.navigationController pushViewController:anotherViewController animated:YES] ;

但是,从anotherViewController现在开始,我想再次访问RootViewController.

我尝试着

// (inside anotherViewController now)
///RootViewController *root = (RootViewController*)self.parentViewController ; // No.
// err
RootViewController *root = (RootViewController*)[self.navigationController.viewControllers objectAtIndex:0] ; // YES!! it works

我不确定为什么这样做,我不确定它是否是最好的方法.有人可以评论一个更好的方法从你已经推入RootViewController的navigationController的控制器获取RootViewController,以及我的方式是否可靠?

iphone uinavigationcontroller ios

133
推荐指数
4
解决办法
13万
查看次数

IOS7:UINavigationController中的UIScrollView偏移量

我目前正在ios 7上迁移我的应用程序,并且我已经在新的导航控制器/栏管理上被困了几个小时.

之前,当我们有导航控制器时,我们有一个这样的片段:

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
Run Code Online (Sandbox Code Playgroud)

在界面构建器中,我们可以选择为视图设置现有导航栏,并且所有内容都与实际视图的内容相匹配.

好的,现在,我不知道如何使用界面构建器正确设计.我仍然有我的片段来初始化我的navcontroller.但是在我的MainViewController的界面构建器中,如果我将状态栏设置为半透明或不透明的导航栏,我的顶部偏移量为44px(见下文).


Interface Builder_________________________和结果


现在,如果我将状态栏设置为无,则顶部没有偏移,但由于导航栏导致模拟器上的视图较小,因此界面构建器中视图的底部被切断.

Interface Builder_________________________和结果

我想我真的在这里遗漏了一些东西,但我在iOS7 Transitions Guide中找不到任何主题或苹果信息.

谢谢你的帮助


编辑

正如我们在图片中看到的那样,视图的第一个子节点是包含两个标签的UIScrollView,当没有scrollview时,问题不会出现.如果它是UITableView也会出现.如果标签位于UIScrollView之外,则该标签没有偏移量.

uinavigationbar uinavigationcontroller ios7

126
推荐指数
3
解决办法
5万
查看次数

以编程方式获取导航栏的高度

我知道更多视图控制器(导航栏)的存在会推动UIView的高度.我也知道这个高度= 44px.我也发现这种下推保持了[self.view].frame.origin.y = 0.

那么如何确定此导航栏的高度,而不仅仅是将其设置为常量?

或者,更短的版本,如何确定我的UIView显示在顶部的导航栏?


灯泡开始亮了.不幸的是,我没有找到纠正问题的统一方法,如下所述.

我相信我的整个问题都集中在我的autoresizingMasks上.并且我得出结论的原因是存在相同的症状,有或没有UIWebView.而这种症状是肖像的一切都是桃色的.对于Landscape,最底部的UIButton在TabBar后面弹出.

例如,在一个UIView上,我从上到下:

UIView - 弹簧设置(默认情况下)和没有支柱

UIScrollView - 如果我设置了两个弹簧,并清除了其他所有弹簧(如UIView),那么UIButton就会闯入它上方的物体上.如果我清除了所有内容,那么UIButton就可以了,但是最顶层的东西隐藏在StatusBar后面只设置顶部支柱,UIButton弹出Tab Bar后面.

UILabel和UIImage接下来垂直 - 顶部支撑设置,在其他地方灵活

只是为少数拥有UIWebView的图片完成:

UIWebView - Struts:顶部,左侧,右侧弹簧:两者

UIButton - 没有设置,即到处灵活

虽然我的灯泡昏暗,但似乎有希望.


请耐心等待,因为我需要更多的空间而不是简短的回复评论.

感谢您试图了解我真正想要捕获的东西......所以这里有.

1)每个UIViewController(一个TabBar应用程序)都有一个UIImage,一些文本和顶部的任何东西.另一个共同点是底部的UIButton.在一些UIViewControllers上,我在UIButton上面有一个UIWebView.

所以,UIImage,文本等UIWebView(在SOME上)UIButton

围绕以上所有是UIScrollView.

2)对于那些拥有UIWebView的人,其autoresizingMask看起来像:

   —
   |
   —

   ^
   |
   |
Run Code Online (Sandbox Code Playgroud)

| - | ←----→| - | | | V UIButton的面具没有任何设置,即在任何地方都很灵活

在我的-viewDidLoad中,我调用了我的-repositionSubViews,我在其中执行以下操作:

如果没有UIWebView,除了将我放置在IB中的UIButton放在中心之外,我什么都不做.

如果我有UIWebView,那么我确定其*content*Height并设置其框架以包含整个内容.

UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
                          sameWholeViewScrollerWidth, webViewContentHeight)]
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,然后我以编程方式向下推UIButton,使其最终放在UIWebView下面.

一切正常,直到我将它从肖像旋转到风景.

我在-didRotateFromInterfaceOrientation中调用了我的-repositionSubViews.

为什么我的UIWebView的内容高度不会随着旋转而改变?

从纵向到横向,内容宽度应该扩展,内容高度应该缩小.它视觉上应该如此,但不是根据我的NSLog.

无论如何,无论是否有UIWebView,我所谈到的按钮在横向模式下移动到TabBar下方,但它不会向上滚动以便看到.当我"大力"滚动时,我在TabBar后面看到它,但随后它"退回"TabBar后面.

最后一点,这就是我询问TabBar和NavigationBar高度的原因,因为TabBar将自己置于UIView的底部,而NavigationBar将UIView向下推.

现在,我要在这里添加一两条评论,因为它们之前没有意义.

没有UIWebView,我将所有内容保留为IB所见.

使用UIWebView,我将UIWebView的frame.height增加到其contentHeight,并向上调整围绕所有子视图的周围UIScrollView的高度.

那么你有它.

objective-c uinavigationbar uinavigationcontroller ios swift

122
推荐指数
10
解决办法
16万
查看次数

像iPhone上的Facebook应用程序SplitView

我想创建一个iPhone应用程序,它使用类似于链接中所示的导航场景

截图

请注意我不希望这只适用于iPad,我希望它完全按照图片的方式为iPhone工作,当你点击一个tableview项目时它会隐藏tableview并使该视图全屏显示.我想知道如何做到这一点,因为我无法弄明白自己.

谢谢

iphone objective-c uinavigationcontroller tableview uisplitviewcontroller

121
推荐指数
3
解决办法
4万
查看次数

iOS11中奇怪的uitableview行为.单元格向上滚动导航推送动画

我最近将一些代码迁移到了新的iOS 11 beta 5 SDK.

我现在从UITableView得到一个非常令人困惑的行为.tableview本身并不那么花哨.我有自定义单元格但在大多数情况下它只是为了它们的高度.

当我用tableview推动我的视图控制器时,我得到一个额外的动画,其中单元格"向上滚动"(或者可能整个桌面框架被更改)并沿着推/弹导航动画向下移动.请看gif:

波浪的tableview

我手动创建tableviewloadView方法和设置自动布局约束等于前置,顶部的tableview的上海华盈的底部.superview是视图控制器的根视图.

视图控制器推送代码非常标准: self.navigationController?.pushViewController(notifVC, animated: true)

相同的代码在iOS 10上提供正常行为.

能指点我指出错误的方向吗?

编辑:我已经制作了一个非常简单的tableview控制器,我可以在那里重现相同的行为.码:

class VerySimpleTableViewController : UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    }


    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        cell.textLabel?.text = String(indexPath.row) …
Run Code Online (Sandbox Code Playgroud)

animation uitableview uinavigationcontroller ios

116
推荐指数
4
解决办法
4万
查看次数

没有导航栏的UINavigationController?

我有一个通用应用程序,在iPad版本上我UISplitViewController用来创建类似于Mail应用程序的界面.

我在推送新的Detail视图时遇到了麻烦,所以我决定使用一个,UINavigationController所以我可以根据需要推送和弹出视图.但是,我不想使用导航视图或工具栏.但无论我做什么,我都无法隐藏导航栏.

我已经尝试取消选中IB中的"显示导航栏",我也尝试过设置:

[self.navigationController setNavigationBarHidden:YES];
Run Code Online (Sandbox Code Playgroud)

viewDidLoad/ viewDidAppear/ viewWillAppear.我也在每个将要推送的视图中尝试过它.什么都行不通.

这里有什么我想念的吗?是否可以UINavigationController没有工具栏或导航栏?

uinavigationcontroller ios

115
推荐指数
4
解决办法
8万
查看次数

UIRefreshControl - 当UITableViewController在UINavigationController中时,beginRefreshing无效

我在我的UITableViewController(在UINavigationController中)设置了一个UIRefreshControl,它按预期工作(即下拉触发正确的事件).但是,如果我以编程beginRefreshing方式在刷新控件上调用实例方法,如:

[self.refreshControl beginRefreshing];
Run Code Online (Sandbox Code Playgroud)

什么都没发生.它应该动画下来并显示微调器.endRefreshing刷新后调用时,该方法可以正常工作.

我用这种行为掀起了一个基本的原型项目,当我的UITableViewController直接添加到应用程序委托的根视图控制器时它可以正常工作,例如:

self.viewController = tableViewController;
self.window.rootViewController = self.viewController;
Run Code Online (Sandbox Code Playgroud)

但是,如果我首先添加tableViewController到UINavigationController,然后添加导航控制器rootViewController,该beginRefreshing方法不再有效.例如

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
self.viewController = navController;
self.window.rootViewController = self.viewController;
Run Code Online (Sandbox Code Playgroud)

我的感觉是这与导航控制器中的嵌套视图层次结构有关,不能与复习控件一起使用 - 任何建议?

谢谢

objective-c uitableview uinavigationcontroller ios uirefreshcontrol

114
推荐指数
10
解决办法
6万
查看次数