1. ホーム
  2. ios

[解決済み] ナビゲーションバーの高さをプログラムで取得する

2022-04-30 10:57:36

質問

more viewコントローラ(ナビゲーションバー)があると、UIViewがその高さ分押し下げられることは知っています。 また、この高さ=44pxであることも知っています。 また、この押し下げによって [self.view].frame.origin.y = 0 .

では、このナビゲーションバーの高さは、定数に設定する以外に、どのように決めればよいのでしょうか。

あるいは、UIViewがナビゲーションバーを上にして表示されているかどうかを判断するにはどうしたらよいでしょうか。


電球がつきはじめました。残念ながら、以下のような画一的な修正方法は見つかっていません。

私は、私の問題の中心はautoresizingMasksにあると信じています。そして、私がそう結論づけた理由は、UIWebViewがあってもなくても、同じ症状が存在するからです。そして、その症状とは、ポートレートではすべてが順調であることです。Landscapeでは、一番下のUIButtonがTabBarの後ろにポップダウンしています。

例えば、あるUIViewでは、上から下に向かって

UIView - スプリングが両方設定されている(デフォルトの場合)、ストラットなし

UIScrollView - 2つのスプリングを設定し、他のすべてをクリアすると(UIViewのように)、UIButtonはそのすぐ上のオブジェクトに侵入します。すべてをクリアすると、UIButtonはOKですが、一番上のものはStatusBarの後ろに隠れてしまいます。 一番上の支柱だけを設定すると、UIButtonはTab Barの後ろに飛び出してしまいます。

UILabel と UIImage を縦に並べる - トップストラットを設定し、それ以外はフレキシブルに変更可能

UIWebViewを持っている少数の人のために、画像を完成させるだけです。

UIWebView - Struts: top, left, right スプリングス: 両方

UIButton - 何も設定されていない、つまりどこでもフレキシブルに使える

私の電球は薄暗いですが、希望はあるようです。


このような場合、「震災の影響によるもの」と考えるのが自然でしょう。

私が本当に求めているものを理解しようとしてくれてありがとう......だからここに行くんだ。

1) 各UIViewController(TabBarアプリ)には、UIImage、いくつかのテキスト、および上部に何かがあります。もう一つの共通点は、下部のUIButtonです。いくつかのUIViewControllerでは、UIButtonの上にUIWebViewを持っています。

つまり、UIImage、テキストなど。UIWebView (SOMEの場合) UIButton

上記すべてを囲むのは、UIScrollViewです。

2) UIWebViewを持つものについては、そのautoresizingMaskは次のようになります。

   —
   |
   —

   ^
   |
   |

| | V UIButtonのマスクには何も設定されていない、つまり、どこでもフレキシブルに対応できます。

viewDidLoadの中で、-repositionSubViewsを呼び出し、その中で以下のことを行っています。

UIWebViewがない場合は、IBで配置したUIButtonをセンタリングする以外は何もしない。

UIWebViewがある場合は、その*content*Heightを決定し、コンテンツ全体を囲むようにフレームを設定します。

UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
                          sameWholeViewScrollerWidth, webViewContentHeight)]

そうしたら、プログラム的にUIButtonを押し下げて、UIWebViewの下に配置されるようにします。

縦長から横長に回転させるまでは、すべてうまくいきました。

私は -didRotateFromInterfaceOrientation の中で -repositionSubViews を呼び出しています。

UIWebViewのコンテンツの高さが回転に伴って変化しないのはなぜですか?

縦長から横長へ、コンテンツの幅は広がり、高さは縮むはずです。視覚的にはそのように見えますが、私のNSLogによるとそうではありません。

とにかく、UIWebViewの有無にかかわらず、Landscapeモードでは、お話したボタンはTabBarの下に移動しますが、上にスクロールして見ることはできません。また、UIWebViewの有無にかかわらず、Landscapeモードでは、ボタンはTabBarの下に移動しますが、上にスクロールして見ることはできません。

結論から言うと、この最後が、TabBarがUIViewの底に身を置き、NavigationBarがUIViewを押し下げるため、TabBarとNavigationBarの高さについて質問させていただいた理由です。

さて、先ほどは意味がなかったでしょうから、ここで一つ二つコメントを付け加えます。

UIWebViewがないため、IBから見えるようにすべてそのままにしています。

UIWebViewで、UIWebViewのframe.heightをcontentHeightまで上げ、すべてのサブビューを囲む周囲のUIScrollViewの高さも上向きに調整します。

さて、これで完成です。

解決方法は?

電球が点くようになった。 残念ながら、以下のような画一的な修正方法は見つかっていません。

私は、私の問題の中心はautoresizingMasksにあると信じています。 そして、私がそう結論づけた理由は、UIWebViewがあってもなくても、同じ症状が存在するからです。 そして、その症状とは、ポートレートではすべてが順調であることです。 Landscapeでは、一番下のUIButtonがTabBarの後ろにポップダウンしています。

例えば、あるUIViewでは、上から下に向かって

UIView - 両方のスプリングを設定し(デフォルトの場合)、ストラットなし

UIScrollView - 2つのスプリングを設定し、他のすべて(UIViewなど)をクリアすると、UIButtonはそのすぐ上のオブジェクトに侵入してしまいます。 すべてをクリアすると、UIButtonはOKですが、一番上にあるものはStatusBarの後ろに隠れてしまいます。 一番上の支柱だけを設定すると、UIButtonはTab Barの後ろに飛び出す。

UILabelとUIImage 次ページ 垂直方向-上部の支柱はセット、その他はフレキシブルに対応

UIWebViewを持っている少数の人のために、絵を完成させるだけです。

UIWebView - ストラット:上、左、右 スプリング:両方

UIButton - 何も設定されていない、つまりどこでもフレキシブルに対応できる

私の電球は薄暗いですが、希望はあるようです。