Ios 为iPhone 5/6/6+的UIButton获取可变高度;

Ios 为iPhone 5/6/6+的UIButton获取可变高度;,ios,uibutton,autolayout,iphone-6-plus,Ios,Uibutton,Autolayout,Iphone 6 Plus,对于我的iOS7/iOS8应用程序,我设计的UI按钮高度可变,适用于iPhone 5、iPhone 6和iPhone 6+。我正在尝试使用自动布局。(但不使用大小类) 使用自动布局如何为这3种屏幕尺寸的UIButton指定可变高度。这些按钮在iPhone5*机型上看起来不错,但在iPhone6/6+上更薄。现在在自动布局中,我可以说高度>=或=或我通过向UIButton添加高度约束来实现这一点。制作一个插座,您可以使用_myConstraint.constant=55在UIViewControl

对于我的iOS7/iOS8应用程序,我设计的UI按钮高度可变,适用于iPhone 5、iPhone 6和iPhone 6+。我正在尝试使用自动布局。(但不使用大小类)


使用自动布局如何为这3种屏幕尺寸的UIButton指定可变高度。这些按钮在iPhone5*机型上看起来不错,但在iPhone6/6+上更薄。现在在自动布局中,我可以说高度>=或=或我通过向UIButton添加高度约束来实现这一点。制作一个插座,您可以使用_myConstraint.constant=55在UIViewController子类中设置高度

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

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

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

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


现在,无论大小如何,按钮的大小都将是其superview的一半。

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

在xib/情节提要中,为高度约束创建视图/控制器的出口

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

CGFloat height;

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

self.buttonHeightConstraint.constant = height;

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

使用AutoLayout时,应始终使用约束,而不是框架(可以修改约束,设置动画…)@rokjarc,那么我如何在自动布局中使用约束指定不同的高度呢?非常感谢所有的回复。。我将全部尝试,看看哪一个解决了我的特定问题。那么,我是否需要在代码中包含一堆#if?例如#如果iphone5的myConstraint.constant=44#如果iphone6的myConstraint.constant=55#如果iphone6+的myConstraint.constant=66,则可以进行运行时检查。目前,除了类大小之外,没有任何方法可以检查情节提要中的设备类型,这可能是您想要的行为,也可能不是您想要的行为。不,您可以这样处理:
if([[UIScreen mainScreen].bounds.size.height==568){myConstraint.constant=44;}//iPhone 5
这是一种提供自适应布局的好方法,但是用这种方法来满足设计师的要求是非常不寻常的。同样,对于这个按钮,您希望提供非常小的乘数值,我发现这在Xcode中可能是一个问题-我试图在屏幕底部的两个按钮之间添加一个细线填充通过将按钮的自动布局宽度设置为与超级视图的宽度相等(乘数为0.4999),这根本不起作用。精度太不准确。听起来这家伙需要在运行时更改约束的常数unfortunately@Daniel显然,手动操作也会起作用。这取决于gr的级别每个用例所需的灵活性,任何一种方法都可以满足要求。请记住,如果在“viewDidLoad”之外执行此操作,则可能必须更新约束。对于“叶”节点(例如UIButton、UIImageView)这必须由调用“invalidateIntrinsicContentSize”触发。感谢@Daniel,到目前为止,您的建议效果良好。我仍在努力。感谢Daniel和@joakim。您的建议非常正确。到目前为止,我所做的是,我已将布局高度约束插座连接到我的*.m文件,并根据我的屏幕大小设置内容属性设置为我想要的大小。到目前为止对我来说效果很好。对于想知道如何将布局约束连接为插座的人,请检查此线程。