【问题标题】:How to set dynamic width & height of a view in autolayout in iOS?如何在 iOS 的自动布局中设置视图的动态宽度和高度?
【发布时间】:2015-08-26 22:56:41
【问题描述】:

我的超级视图中有一个 UIView。我已经设置了一些约束。现在我希望不同设备上的视图大小应该不同。如果我设置了固定宽度和高度,那么我会得到错误的结果。我有尝试使用用户纵横比,但这会使多个设备上的视图太大或太小。

我希望高度和宽度应该以相同的比例增加,它必须在所有设备上看起来都一样。我想要灵活的视图高度和宽度。请告诉如何做到这一点?

这是图片

提前致谢

【问题讨论】:

  • 放置屏幕截图
  • 请看图片链接
  • 如果你想让你的宽度和高度灵活,不要设置宽度和高度约束。设置顶部、前导、尾随和底部约束。
  • @Maverick 问题是我希望我的视图位于主视图的中心,然后使其高度和宽度灵活。
  • 你能把 nib 文件和相应的类发邮件给我吗,我会修好然后发给你

标签: ios objective-c xcode macos autolayout


【解决方案1】:

使用尺寸等级。它有助于为不同的设备进行不同的设置。 http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial https://youtu.be/IwSTXY0awng?t=2m12s

【讨论】:

  • 我知道尺寸等级是做到这一点的方法之一。所以这意味着我不能没有尺寸等级。我现在使用基本的所有值尺寸等级@Andrei Luca
  • 类似的方式我有更多的内容,如图像视图和标签其他我想要不同大小的组件。那么我需要使用尺寸等级吗?
  • 我想在 iphone 4 和 iphone 6 上有不同的视图尺寸,但它们的尺寸等级是一样的
  • 在这种情况下,使一些 IBOutlets 成为控制视图的约束,并以编程方式非常容易地为每个设备更改它们。您甚至可以为这些约束设置动画。
  • 好吧,我期待着如果我不需要使用任何代码。在发布 xocde 6 和 iOS 8 时,我们不需要编写代码并且可以通过使用故事板来实现这一点。
【解决方案2】:

最简单的方法是为您的width 和height 约束创建一个Outlet。

然后根据手机在viewDidLoad中动态更改。

要检查它是哪部手机,您可以检查设备高度,例如 iPhone 4S 的480,iPhone 5,5S 的568等

@interface ScoreListViewController (){
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *widthConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;

@end



- (void)viewDidLoad {
[super viewDidLoad];
// Set the value according to your requirement
if(4S){
self.heightConstraint.constant=100;
}

 }

【讨论】:

  • 这就是我不想要的,为什么我不能只使用故事板来改变视图的高度和宽度并让它们动态@muku
  • 你不能我的朋友,你不能用故事板做到这一点
  • 那么为什么他们说如果我们使用 xcode 6 和 iOS 8 我们不需要编码。@muku
  • 在某些情况下我们必须使用不同的方法。为什么苹果会同时提供这两种方法
  • 那么 xocde 6 & size classes 的作用是什么?
【解决方案3】:

尝试按照以下屏幕截图进行操作:

你会得到如下结果

【讨论】:

  • 先生,但是所有屏幕尺寸的红色视图的宽度都不正确。如您所见,宽度不好。我想要相等的比例。这是我面临的同一个问题
  • 你的意思是宽度和高度需要相等
  • 如果您在 4.7 英寸屏幕上看到该框,我希望在所有手机屏幕中都使用该类型框,而 3.5 中的框高度是工具小且宽度也很小。所以我想要那种类型的框手机屏幕。
  • 我怀疑我想要的东西是否可能只使用故事板?
  • 你能帮我吗?
【解决方案4】:

我写了一篇博客article,关于动态更改布局的自动布局。
对于每种屏幕尺寸,您都可以通过编程方式添加约束。
算法

  1. 获取当前设备大小
  2. 根据设备大小获取所需的约束
  3. 然后以编程方式添加约束


根据方向改变

  • 收听 UIDeviceOrientationDidChangeNotification 通知
  • 根据通知添加新的约束
  • 然后调用 setNeedsUpdateConstraints
    有关更多信息和示例代码,请查看博客文章和thisgithub repo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多