1

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

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

编辑-更多信息:所以我刚刚了解到分段控件通常位于类似UIToolbar. 因此,我创建了IBOutlet对故事板为我创建的工具栏的引用。当我记录此工具栏的位置时,我可以看到 y 位置偏离了我想要的位置。但是,设置此工具栏的框架似乎并没有移动它。

4

2 回答 2

2

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

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

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

于 2012-10-23T16:07:09.420 回答
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;

} 
于 2013-10-21T23:41:26.577 回答