【问题标题】:Autoresize not working in xib自动调整大小在 xib 中不起作用
【发布时间】:2013-03-27 18:52:01
【问题描述】:

我在.xib做了简单的设计,我的应用部署目标是iOS 5 当我在模拟器或设备中运行我的应用程序时,我的视图不会调整大小。

这是我的.xib 文件的快照..

当我尝试在模拟器中运行我的应用程序时,它在 4" 的模拟器中正常运行,但是当我在 3.5" 的模拟器中运行我的应用程序时,它不会调整大小。 Autoresize subview 属性被选中。

这是我的Simulaotrs 的截图,第一个截图是 3.5 英寸的,第二个是 4 英寸的..

提前致谢。

【问题讨论】:

  • 设置大小=无到 Retina 3.5 全屏
  • 你集成了滚动视图吗?所以你可以滚动页面。因为导航和标签栏控制器无法查看整个视图
  • 不是scrollView,只是简单视图
  • 为了简单的解决方案,你为什么不为 iPhone4/4S 和另一个 iPhone5 创建两个单独的 Xib。你不必以编程方式管理。
  • 您希望在两种不同的屏幕尺寸上发生什么?你在那里有一个图标矩阵,这不是可以用自动调整大小的蒙版重新排列的东西。您能否编辑问题以解释您希望在每个模拟器中看到的内容?例如,如果您希望所有图标在 3.5 英寸屏幕中更靠近,则使用自动调整大小的蒙版是不可能的。

标签: iphone ios ipad xib autoresize


【解决方案1】:

能否请您使用 .xib 文件中的下一个设置(416 = 480 - 20(状态栏宽度)- 44(导航栏宽度)

如果您想要 iPhone 5 顶部的图标,请使用图标的下一个设置:

如果您想要 iPhone 5 底部的图标,请使用图标的下一个设置:

【讨论】:

  • 你的好建议,你知道如何在图标和标签之间添加空格吗?
  • label - 它是内部按钮中的标签还是带有图标和标签的按钮 - 它是不同的元素?
  • 如果是第一个变体,您可以在 UIButton 中使用 contentEdgeInsets、imageEdgeInsets、titleEdgeInsets 属性。如果您使用第二个变体,您应该在标签中使用正确的 autoresizingMask 属性
  • 它们是不同的元素,我在按钮下方放置了标签。
  • 您可以将相同的 autoresizingMask 属性设置为标签作为按钮
【解决方案2】:

如果您想自动调整和自动排序引用上视图的图标,请尝试使用布局选项卡

或为每个布局创建自己的 .xib ;)

【讨论】:

  • 你的好建议,你知道如何在图标和标签之间添加空格吗?
  • 在我的应用程序中,我以编程方式设置了它。也许您可以使用容器视图?或者只是一个 UICollectionView 并设置 rowheight ^^ 但是当你这样做时,你可以构建第二个和第三个 .xib 文件。如果您不打算扩展列表但让它保持静态,这是最简单的方法;)如果您知道项目的数量会扩展,那么最好使用集合视图。如果不喜欢它或必须在 IOS 5.1 及更低版本中使用它,我可以为您提供类似的解决方案;)
【解决方案3】:

检查您是否取消选中.xib文件中的自动布局选项..

【讨论】:

  • 能发一下截图吗
【解决方案4】:

我想通过按钮网格实现类似的效果。我想你会发现 iOS 5 支持的自动调整大小根本无法做到。最后我有两个 Storyboard,一个用于 iOS 6 设备,另一个用于 iOS 5。我的 App Delegate 然后检查主视图是否响应 UIView 的 constraints 方法(它告诉你它是否支持新的 iOS 6基于约束的布局)并加载相关的故事板。

在你的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中有这样的东西:

if (![self.window.rootViewController.view respondsToSelector:@selector(constraints)]) {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_BC_iPhone" bundle:nil];
    UITabBarController *rootController = [storyboard instantiateInitialViewController];
    [self.window setRootViewController:rootController];
}

默认情况下会加载 iOS 6 故事板,但如果需要,这会使用向后兼容的故事板覆盖它。向后兼容的 Storyboard 仅手动设置为 3.5" 显示器,因为 iPhone 5 将只运行最低 iOS 6,因此向后兼容的 Storyboard 不需要在 4" 显示器上运行。

设置向后兼容的 Storyboard 并不需要很长时间 - 只需复制使用约束的 iOS 6 版本,然后将其设置为 3.5" 显示器,关闭约束并修复视图。

另一种方法是根据屏幕尺寸以编程方式布局图标。这样做的好处是您可以设计它以适应任何屏幕尺寸,但缺点是这可能需要更多的努力。

[编辑] 注意到您使用的是 .xib 而不是 Storyboard,但理论是相同的。检查 UIView 是否响应constraints,然后相应地加载相应的 NIB (.xib) 文件。

【讨论】:

    【解决方案5】:

    解决方案非常简单。
    在您的超级视图上添加 UIVIew ,然后像这样将所有图标添加到它们上 (注意从导航控制器到标签栏的视图大小)

    这个子视图(有你的图标的那个)应该有这些自动调整大小的掩码

    • 而且您的图标应该具有相同的自动调整大小蒙版。

    【讨论】:

      【解决方案6】:

      您可以从Ray WenderLich example 获得参考。非常简单的 autoLayout 解释和示例。它将描述你犯错的每一行。如果你启用了 Autolayout,那么在选择 View 时约束必须显示在左侧。

      【讨论】:

        【解决方案7】:

        在我看来,您有几个选项,具体取决于您的布局设置方式以及您希望如何解决它。

        如果您使用的是 Autolayout,则元素上会有 Contraints,这可能会导致无法在视图中显示所有元素,即使您使用调整大小也是如此。他们只是不适合。所以在这种情况下,我建议你使用 480 分辨率的滚动视图来让你的视图能够显示出来。

        在您的 .h 文件中,为您的视图创建一个 IBOutlet:

        @property (strong, nonatomic) IBOutlet UIView *contentView;
        

        在你的 .m 文件中,像这样设置。

        //Add scrollview
        UIScrollView *scrollView=(UIScrollView *)self.view;
        scrollView.contentSize=self.contentView.frame.size;
        [self.view addSubview:self.contentView];
        

        另一种解决方法是,您可以将元素放置在您喜欢的任何位置,并使用不同的间距等。创建两个不同的 .xib 文件并在 ViewController 中像这样进行设置:

        - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
        {
            if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
                if([UIScreen mainScreen].bounds.size.height == 568.0)
                {
                    //Use iPhone5 VC
                    self = [super initWithNibName:@"RootViewController-568h" bundle:nibBundleOrNil];
                }
                else{
                    //Use Default VC
                    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
                }
            }
            return self;
        }
        

        如果你调用你的 ViewController RootViewController 这样你是安全的,如果他们决定在即将到来的 iPhone5s 或 iPhone6 上扩大屏幕尺寸。它看起来不太好,但至少不会导致应用崩溃。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-29
          • 1970-01-01
          • 2018-02-27
          • 1970-01-01
          • 2018-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多