更改UISegmentedControl的高度

我正在尝试使用此代码更改UISegmentedControl高度:

 CGRect frame= mySegmentedControl.frame; [mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)]; 

但它不起作用。 有没有人知道为什么? 实际上,如果我在界面生成器中取消选中分段控件的“使用Autolayout”function,但由于某些原因,分段控件中的项目不能点击

这是问题的旁边,我仍然没有find一个简单的方法来添加多行文本到UISegmentedControl (这里的任何帮助也将不胜感激)。

看来这是关于查看周期。

在iOS中放置视图实际上涉及3个因素1.自动布局(自iOS6以来可用)2. setFrame 3.自动重新设置遮罩

对于你的情况,

自动布局将有助于计算所需的帧(基于NSLayouConstraints)为该UIView然后奠定出来。

因此,在界面构build器中,如果启用“autolayout”,界面构build器将为该UIView生成NsLayoutConstraints。 如果您禁用“自动布局”,则构build器将为您生成UIView的框架。

假设你必须使用自动布局,你必须在正确的时间调整你的UISegmentedControl

 - (void)viewDidLayoutSubview 

这是关于视图的生命周期。 为了简化它,就像:

updateConstraints – >布局(您最好观看相关的WWDC会话video了解详情)

你不能改变框架,因为这个stream程:

通过代码设置新框架 – >查看句柄约束和计算(为UISegmentedControl生成其他框架) – >执行布局

对不起,这个组织不好的答案。

也许这将有助于:我有一个自定义大小的故事板视图内的UISegmentedControl。 故事板视图正在使用AutoLayout,每次按下其中一个段时,UISegmentedControl将调整为默认高度,而不是自定义帧大小。

我的解决scheme

1)在 – (void)viewDidLoad中设置UISegmentedControl框架:

 [mySegControl setFrame:CGRectMake(100, 170, 568, 100)]; 

2)在 – (void)viewDidLayoutSubviews中设置框架:

 [mySegControl setFrame:CGRectMake(100, 170, 568, 100)]; 

3)在你select段的目标方法中,调用setNeedsLayout。 这将强制UISegmentedControl重新布局IAW您的自定义框架大小

 [self.view setNeedsLayout]; 

对我来说我使用这个mySegmentedControl.frame=CGRectMake(236, 178, 171, 35); 它像一个魅力。

你检查帧值?

要在Interface Builder中执行此操作,您可以在“用户定义的运行属性”下select控件并添加框架属性

在Interface Builder中添加框架属性

幸运的是,你也可以改变xib的高度。

你也可以通过xib来完成。 只要将一个段控件添加到xib 。 然后在TextEdit中打开xib 。 在那里你会find代码:

 <segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="B99-Tt-vJG"> <rect key="frame" x="222" y="82" width="123" height="44"/> 

在这里,你可以将高度从44更改为任何所需的高度。 你可以像这样改变任何UIConponent的高度。 即使对于UIPickerView