2

問題

UISegmentedControliOS アプリケーション用のカスタム コンポーネントを作成し、ナビゲーション バーに 2 つのセグメントを配置しました。ご想像のとおり、電話を横向きに回転させると、コンポーネントの高さがわずかに短くなります。

ただし、問題は、横向きに回転した後、縦向きに戻った後でもセグメント化されたコントロールが短い高さを保持することです。私はあなたの助けに感謝します。

initWithCoder:メソッド内にある(簡略化された)コードは次のとおりです。

UIImage *bg = [[UIImage imageNamed:@"button-bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(7, 7, 7, 7)];
UIImage *bgH = [[UIImage imageNamed:@"button-bg-h"] resizableImageWithCapInsets:UIEdgeInsetsMake(7, 7, 7, 7)];

[self setBackgroundImage:bg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self setBackgroundImage:bg forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];
[self setBackgroundImage:bgH forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[self setBackgroundImage:bgH forState:UIControlStateSelected barMetrics:UIBarMetricsLandscapePhone];

============================

一時的な回避策

より良い解決策が見つかるまでの一時的な回避策は次のとおりです。

segmentControlView Controller には、問題の にリンクされたというアウトレットがありUISegmentedControlます。また、次のようにプロパティを作成しました。

@property CGRect segmentedControlPortraitOrientationFrame;

メソッドの内部viewDidLoad:

self.segmentedControlPortraitOrientationFrame = self.segmentControl.frame;

didRotateFromInterfaceOrientation:次に、次の実装でオーバーライドします。

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    [super didRotateFromInterfaceOrientation:interfaceOrientation];
    if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation))
        self.segmentControl.frame = self.segmentedControlPortraitOrientationFrame;
}

回避策は、アプリが縦向きをサポートしている限り、アプリが常に最初に縦向きで読み込まれることを前提としています。私が間違っている場合は修正してください。

4

0 に答える 0