以编程方式指定UISegmentedControl的位置

时间:2012-10-23 15:55:56

标签: iphone uikit uisegmentedcontrol

如何以编程方式指定UISegmentedControl的位置?设置框架什么都不做。似乎mySegmentedControl.frame返回按钮的框架而不是“边界矩形”。

我应该注意到我正在使用的分段控件是通过界面构建​​器添加的。

编辑 - 更多信息:所以我刚刚了解到分段控件通常会出现像UIToolbar这样的内容。所以我已经为故事板为我创建的工具栏创建了一个IBOutlet引用。当我记录这个工具栏的位置时,我可以看到y位置与我想要的一样。但是,设置此工具栏的框架似乎不会移动它。

2 个答案:

答案 0 :(得分:2)

设置框架是正确的方法。您的项目还有其他问题。您可以使用带有UIButton和UISegmentedControl的简单单一视图项目来测试它:

- (IBAction)buttonTapped:(id)sender {
    self.segmentedControl.frame = ((UIButton*)sender).frame;
    ((UIButton*)sender).hidden = YES;
}

这将设置具有相同位置的分段控件。大小为按钮,然后隐藏按钮。

答案 1 :(得分:1)

奇怪的是,你不能只改变x或y值,你必须改变整个帧。

我在应用程序中使用合成声音并且在声音播放之前有延迟。如果在低于iOS7的情况下运行,我会隐藏分段控件和标签。但这在屏幕上留下了一个空白,而控制曾经是。此代码将下一个分段控件移动到原始控件的位置。

if ( SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"7.0") ) {

            // Hide the delay control
            self.chooseDelaySegmentedControl.hidden = YES;
            self.targetSoundDelayText.text = @"";

            // Move the segmented control up
            CGRect scoringTypeFrame = self.chooseScoringTypeSegmentedControl.frame;
            scoringTypeFrame.origin.y = scoringTypeFrame.origin.y - 70.0f;
            self.chooseScoringTypeSegmentedControl.frame = scoringTypeFrame;

            CGRect scoringTypeTextFrame = self.scoringChoiceText.frame;
            scoringTypeTextFrame.origin.y = scoringTypeTextFrame.origin.y - 70.0f;
            self.scoringChoiceText.frame = scoringTypeTextFrame;

}