更改UISegmentedControl的高度

时间:2012-12-19 07:40:52

标签: objective-c ios cocoa-touch

我正在尝试使用以下代码更改UISegmentedControl的高度:

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

但它不起作用。谁知道为什么?它实际上是有效的,如果我在界面构建器中取消选中分段控件的“使用Autolayout”功能,但由于某些原因,分段控件中的项目变得无法点击...

这是问题的旁边,我仍然没有找到一种简单的方法来向UISegmentedControl添加多行文字(此处的任何帮助也将受到赞赏)。

5 个答案:

答案 0 :(得分:8)

似乎是视图周期。

在iOS中布置视图实际上涉及3个因素 1.自动布局(自iOS6起可用) 2. setFrame 3.自动清除面罩

对于您的情况,

autolayout将帮助计算UIView所需的帧(基于NSLayouConstraints),然后将它们放出来。

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

假设您必须使用autolayout,您必须在正确的时间调整UISegmentedControl的大小

- (void)viewDidLayoutSubview

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

updateConstraints - >布局(您最好观看相关的WWDC会话视频以获取详细信息)

您无法更改框架,因为此流程:

按代码设置新框架 - >查看句柄约束和计算(为UISegmentedControl生成另一个框架) - >做布局

对于这个组织不当的答案感到抱歉。

答案 1 :(得分:4)

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

我的解决方案:

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

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

2)将框架设置为 - (void)viewDidLayoutSubviews:

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

3)在用作选择段的目标的方法中,调用setNeedsLayout。这将强制UISegmentedControl重新布局IAW您的自定义帧大小

[self.view setNeedsLayout];

答案 2 :(得分:3)

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

你检查了帧值吗?

答案 3 :(得分:2)

要在Interface Builder中执行此操作,您可以选择控件并在"用户定义的运行时属性"

下添加框架属性

adding frame attribute inside Interface Builder

答案 4 :(得分:1)

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

您也可以通过xib完成此操作。只需将段控件添加到xib即可。然后在TextEdit中打开xib。在那里你会找到代码:

<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