【问题标题】:How do I compose a subview of the root view in Interface Builder?如何在 Interface Builder 中组成根视图的子视图?
【发布时间】:2011-03-29 04:22:26
【问题描述】:

我正在尝试创建一个包含可滚动控件(按钮、文本视图、标签等)的视图,因为我没有足够的屏幕空间来容纳所有控件。我知道我需要我的应用程序中的根视图是 UIScrollView 并且我需要附加一个 UIView ,其中包含我的所有控件。问题是,在我将根视图设置为 UIScrollView 并将 UIView 添加到根视图后,Interface Builder 不会让我定位任何控件,它只会将它们全部放在中心。

  1. 我是否正确理解了如何制作视图滚动?
  2. 如果是这样,如何让 Interface Builder 允许我定位控件?
  3. 一旦我能够做到这一点,如何将 Interface Builder 中的控件定位到窗口尺寸之外,因为它可以滚动?

非常感谢您的帮助!

【问题讨论】:

    标签: iphone ipad interface-builder uiscrollview ios


    【解决方案1】:

    根据我的经验,您最好将 UIView 作为根视图,然后将 UIScrollView 作为该视图的唯一一个填充屏幕的子视图。节省了代码(丑陋的演员表)和扩展时的一些麻烦(之后如何在其中放置一些屏幕固定元素?)

    如果你想保留在 IB 中,也可以

    • 将您自己的自定义视图添加到库中(抱歉,没有这方面的经验),或者
    • 只需将大 UIView 放在滚动视图中并按元素的 x/y 位置定位元素,或者
    • 将根视图状态栏设置为未指定,以便您可以将根视图调整为正确布局滚动视图内容所需的任何大小,完成后,将其重新包装为 320x480(但请确保禁用在正确的元素上自动调整大小,否则调整大小操作会破坏您的工作),或
    • 单独设计 UIView 并将其作为滚动视图的子视图拖放到位,在文档窗口中!使用 cmd-0,那个窗口! 在你把东西放进去之前,父级会亮起来。将放置的子视图的左上角 x,y 设置为 0,0。 (此方法需要您每次拖放时链接所有网点)

    如果您选择采用非 IB 路线,请设计您的 UIView 并将其保存为 nib,然后在 rootcontroller 加载时以编程方式加载 nib。 (关于 SO 的话题有很多)当你做对了,从设计/IB 的角度来看,这将是最友好的方式。

    所以.. 有很多选择,但没有一个是 真正 好的。 IB可以创造奇迹,但你需要一些时间来理解它。 (我还在苦苦挣扎……欢迎提出建议)


    为了清楚起见,我的典型 view-scrollview-view-elements 布局看起来带有假数字,例如:

    View (320x480-ish)
        Scroll View (320x480-ish)
            View (1024x1024)
                Label (positioned 0,0)
                Button (positioned 500,900)
                ImageView (1024x800, positioned 0,100)
        UISearchBar (possibly, always on screen, above scrollview or sliding in, ...)
    

    【讨论】:

    • 我仍然有同样的问题,即使你发布的布局也是如此。在 IB 中,如果我有一个 UIView 作为根视图,那么我将一个 UIScrollView 作为子视图添加到它,然后我添加到另一个 UIView,然后我将所有控件作为子视图添加到其中,IB 不会让我定位他们。它只是把它们粘在中间,我不能移动它们。
    • 嗯,无法重现您在此处所说的内容。我确实知道 VC 下的顶视图将位于中心,不可变。除此之外,我没有丝毫线索。如果你能分享显示这个的 xib,我会看看。
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多