如何以编程方式指定 a 的位置UISegmentedControl
?设置框架什么都不做。它似乎mySegmentedControl.frame
返回按钮的框架而不是“边界矩形”。
我应该注意到我正在使用的分段控件是通过界面生成器添加的。
编辑-更多信息:所以我刚刚了解到分段控件通常位于类似UIToolbar
. 因此,我创建了IBOutlet
对故事板为我创建的工具栏的引用。当我记录此工具栏的位置时,我可以看到 y 位置偏离了我想要的位置。但是,设置此工具栏的框架似乎并没有移动它。
如何以编程方式指定 a 的位置UISegmentedControl
?设置框架什么都不做。它似乎mySegmentedControl.frame
返回按钮的框架而不是“边界矩形”。
我应该注意到我正在使用的分段控件是通过界面生成器添加的。
编辑-更多信息:所以我刚刚了解到分段控件通常位于类似UIToolbar
. 因此,我创建了IBOutlet
对故事板为我创建的工具栏的引用。当我记录此工具栏的位置时,我可以看到 y 位置偏离了我想要的位置。但是,设置此工具栏的框架似乎并没有移动它。
设置框架是正确的方法。您的项目中还有其他问题。您可以使用带有 UIButton 和 UISegmentedControl 的简单单视图项目对此进行测试:
- (IBAction)buttonTapped:(id)sender {
self.segmentedControl.frame = ((UIButton*)sender).frame;
((UIButton*)sender).hidden = YES;
}
这会将分段控件设置为与按钮相同的位置和大小,然后隐藏按钮。
奇怪的是,你不能只改变 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;
}