我正在尝试使用以下代码更改UISegmentedControl
的高度:
CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];
但它不起作用。谁知道为什么?它实际上是有效的,如果我在界面构建器中取消选中分段控件的“使用Autolayout”功能,但由于某些原因,分段控件中的项目变得无法点击...
这是问题的旁边,我仍然没有找到一种简单的方法来向UISegmentedControl
添加多行文字(此处的任何帮助也将受到赞赏)。
答案 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中执行此操作,您可以选择控件并在"用户定义的运行时属性"
下添加框架属性
答案 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
。