为什么我的控制器没有正确显示所有文本字段?

时间:2014-04-02 18:27:39

标签: ios iphone uinavigationcontroller uitextfield rubymotion

我有两个控制器。在第一个控制器上,我有一个添加按钮。单击此按钮会向用户显示包含文本字段的第二个控制器。但是,文本字段未正确显示。看起来他们需要从顶部获得保证金。如此截图所示

enter image description here

这是我的代码

第一个控制器

    class OneController < UITableViewController
     ....
       def viewDidLoad
        super

        rmq.stylesheet = OneControllerStylesheet

        view.tap do |table|
          table.delegate = self
          table.dataSource = self
          rmq(table).apply_style :table
        end

        self.navigationItem.rightBarButtonItems = [UIBarButtonItem.alloc.initWithBarButtonSystemItem(
            UIBarButtonSystemItemAdd,
            target: self,
            action: :addSomething)]
      end

  def addSomething
    self.add_category_controller.player = nil

    ctlr = UINavigationController.alloc.initWithRootViewController(self.add_something_controller)
    ctlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical
    ctlr.delegate = self

    self.presentViewController(ctlr, animated:true, completion:nil)
  end

  def add_something_controller
    @add_something_controller ||= TwoController.new.tap do |ctlr|
        ctlr.navigationItem.leftBarButtonItem = UIBarButtonItem.alloc.initWithBarButtonSystemItem(
            UIBarButtonSystemItemCancel,
            target: self,
            action: :cancelAdd)

        ctlr.navigationItem.rightBarButtonItem = UIBarButtonItem.alloc.initWithBarButtonSystemItem(
            UIBarButtonSystemItemDone,
            target: self,
            action: :doneAdd)

        ctlr.navigationItem.rightBarButtonItem.enabled = false
    end
  end

    ...
    end

第二个控制器

    class TwoCategoryController < UIViewController
      ...
      def viewDidLoad
        puts "viewDidLoad"

        self.view.backgroundColor = UIColor.groupTableViewBackgroundColor

        self.view.addSubview(self.first_field)
        self.view.addSubview(self.last_field)
      end
     ...
    end

3 个答案:

答案 0 :(得分:0)

您的视图控制器需要将automaticallyAdjustsScrollViewInsets设置为NO。

iOS 7的默认设置是滚动视图填满整个屏幕,包括“在”状态和导航栏下方。

或者,您可以使导航和状态栏保持半透明,只需在文本视图上方添加填充。

答案 1 :(得分:0)

在iOS 6(及之前版本)中,您的视图的原点设置为{x:0,y:64}(在窗口坐标系列中),位于导航栏下方。

在iOS 7中,我们现在已经全屏了#34;视图几乎所有时间。这就是你在这里碰到的东西。您的视图位于{x:0,y:0},因此位于导航和状态栏下方。

我认为解决此问题的正确方法是在控制器视图上使用约束(self.view中的TwoCategoryController),然后您可以使用UIViewController#topLayoutGuide#bottomLayoutGuide来将它放在可见区域内。

那将是&#34;正确的&#34;方式,但您也可以轻松自己,只需找出导航栏(44)+状态栏(20)的高度,并将其存储在变量或方法中,然后只需更正文本字段框架低于该值。

答案 2 :(得分:0)

我不是rubymotion开发人员,但找到this回答。希望它会有所帮助:)