UITextField作为子视图的UINavigation

时间:2016-12-22 06:44:31

标签: ios objective-c iphone

我想让UI如下,

enter image description here

我试图增加UINavigationController的高度,如

[self.navigationController.navigationBar setFrame:CGRectMake(0, 0, 320, 110)];

但导航标题和BarButtonItem显示为向下。 我无法添加隐藏导航,因为我正在使用使用Left BarButtonItem的第三方侧面菜单。

我可以很好地保持导航,因为它在下面我添加了uiview作为子视图,其背景颜色与导航颜色相同但是......之间出现了细线:(

3 个答案:

答案 0 :(得分:3)

您无法增加UINavigationBar的高度。添加一个UIView,其中包含UINavigationBar下面的元素。

然后UINavigationBar下面会有额外的行。您可以删除该行。请参阅How to hide iOS7 UINavigationBar 1px bottom line

或者使用此代码(我刚从swift中的链接复制它,将其转换为Objective-C)

import UIKit

class ViewController: UIViewController {

    private var shadowImageView: UIImageView?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.isHidden = true
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        shadowImageView?.isHidden = false
    }

    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }

        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }
}

这是结果

enter image description here

答案 1 :(得分:0)

实际上你无法改变UINavigationBar的高度。您的实际ViewController视图将从TopLayoutGuide(垂直空间)的64像素开始 状态栏高度为20像素 导航栏高度为44像素

因此,要设计此类UI,只需执行以下步骤

即可
  1. 在该视图控制器上隐藏NavigationBar,如

    self.navigationController.navigationBarHidden = YES;
    self.navigationItem.hidesBackButton = YES;

  2. 然后将来自vertical space的{​​{1}}的故事板中的视图添加为TopLayoutGuide。并根据您的要求进行设计。所以你可以 只需提供此外观并使用IBOutletsIBActions处理它 每个项目

  3. 您还可以添加UILable来显示屏幕标题。

答案 2 :(得分:0)

您无法增加UINavigationBar的大小。这是标准尺寸44(导航高度)+ 20(状态栏的大小)。在这里,你有两个选择。

首先,通过添加菜单,仪表板标题标签&amp; UINavigationBar的通知图标。将作业,条件和面试添加为导航栏下方的单独视图。

第二,通过自定义整个视图,如@Pushkraj所提到的那样,隐藏当前导航栏并添加包含所有UI元素的自己的视图。