【问题标题】:Get variable height for a UIButton for iPhones 5/6/6+获取适用于 iPhone 5/6/6+ 的 UIButton 的可变高度
【发布时间】:2015-04-12 10:38:53
【问题描述】:

对于我的 1) 仅纵向 2) 部署目标 iOS7/iOS8 应用程序,我的设计 UIButtons 具有可变高度,适用于 iPhone 5、iPhone 6 和 iPhone 6+。我正在尝试为此使用自动布局。 (虽然不使用尺寸等级)。

如何使用自动布局为这 3 种屏幕尺寸的 UIButton 指定可变高度。这些按钮在 iPhone 5* 型号上看起来不错,但在 iphone 6/6+ 上更薄。现在在自动布局中,我可以说高度 >= 或 = 或

这是我可以仅使用自动布局实现的,还是我需要在代码中操纵(框架)它?那我使用自动布局有什么意义呢?

除了框架之外,我的设计还指定了不同的字体大小。我该怎么做。任何最知名的方法,Stack-O 朋友 .. ??

【问题讨论】:

  • 使用自动布局时,您应该始终使用约束而不是框架(约束可以修改、动画...)
  • @rokjarc,那么我如何在自动布局中使用约束来指定不同的高度?
  • 感谢大家的回复。我将全部尝试一下,看看哪一个能解决我的特定问题。

标签: ios uibutton autolayout iphone-6-plus


【解决方案1】:

你问“如果我必须直接操作帧,自动布局有什么意义”是正确的?谢天谢地,您不必这样做。

一种简单的方法是指定与标准高度视图相关的高度(想想适合整个屏幕的视图)。

例如,我们可以将按钮的高度设置为视图高度的一半。

这样,按钮总是会随着视图向上或向下(按大小)缩放。自动布局将保证它们之间的关系始终为 1/2。

现在按钮的大小将是其父视图的一半,而不管大小。

【讨论】:

  • 这是提供自适应布局的好方法,但是以这种方式满足设计师的要求是非常不寻常的。同样在此按钮的情况下,您希望提供非常小的乘数值,我发现这在 Xcode 中可能是一个问题 - 我试图通过设置自动布局一次在屏幕底部的 2 个按钮之间获得细线填充按钮的宽度等于乘数为 0.4999 的超级视图的宽度,但这没有成功。精度太不准确了。不幸的是,听起来这家伙只需要在运行时更改约束的常量
  • @Daniel 显然,手动操作也可以。根据每个用例所需的粒度级别,任何一种方法都可以满足要求。
【解决方案2】:

听起来您需要修改高度约束常量值。

在您的 xib/storyboard 中,为您的视图/控制器创建一个用于高度约束的出口。

在运行时,可能在viewDidLoad 中,您将计算出您在哪个设备上,然后只需更改高度约束的常数。

CGFloat height;

// if iPhone 5
// height = 44
// else..........

self.buttonHeightConstraint.constant = height;

这将自动触发一个标志,告诉 AutoLayout 重新计算框架并重新布局视图。

【讨论】:

  • 请记住,如果在 'viewDidLoad' 之外执行此操作,则可能必须更新约束。对于“叶”节点(例如 UIButton、UIImageView),这必须通过调用“invalidateIntrinsicContentSize”来触发。
  • 感谢@Daniel,到目前为止,您的建议运作良好。我还在努力。
  • 感谢 Daniel 和 @joakim .. 你的建议很中肯。到目前为止,我已经将布局高度约束出口连接到我的 *.m 文件,并根据我的屏幕尺寸,将 content 属性设置为我想要的尺寸。到目前为止对我来说效果很好。对于想知道如何将布局约束连接为插座的人,请查看此线程。 stackoverflow.com/questions/22086054/…
【解决方案3】:

我通过向 UIButton 添加一个高度约束来解决这个问题。做一个插座,你可以在你的 UIViewController 子类中设置高度 _myConstraint.constant = 55;

【讨论】:

  • 那么,我需要在代码中添加一堆#if 吗?例如 #if iphone5 _myConstraint.constant = 44 #if iphone6 _myConstraint.constant = 55 #if iPhone6+ _myConstraint.constant = 66
  • 它们可以是运行时检查。目前没有任何方法可以检查故事板中的设备类型,除了班级规模,这可能是也可能不是你想要的行为。
  • 不,你可以这样处理:if ([[UIScreen mainScreen].bounds.size.height == 568) { _myConstraint.constant = 44; } //iPhone 5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多