回答:
UIView
兄弟は、スーパービューに追加された順にスタックされます。UIView
階層のメソッドとプロパティが表示順序を管理することがあります。UIView.hで:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
兄弟ビューは、subviews
配列内で後ろから前に並べられます。したがって、最上位のビューは次のようになります。
[parentView.subviews lastObject];
底面は次のようになります。
[parentView.subviews objectAtIndex:0];
Kolin Krewinkelが言った[parentView bringSubviewToFront:view]
ように、ビューが最上位に表示されますが、これはビューが階層内のすべての兄弟である場合にのみ当てはまります。
zPosition
ビューのレイヤ(CALayer
オブジェクト)のプロパティを使用して、ビューのZ-indexを変更できます。
theView.layer.zPosition = 1;
以下のようヴィクトルNordlingが追加、「大きな値が一番上にある。あなたが負の値を含む、あなたが望む任意の値を、使用することができます。」デフォルト値は0です。
レイヤーにアクセスするには、QuartzCoreフレームワークをインポートする必要があります。このコード行を実装ファイルの先頭に追加するだけです。
#import "QuartzCore/QuartzCore.h"
zPosition
作品を作成するために、ビューのスーパービューは同じである必要がありますか?
IBとSwift
黄色がスーパービューで、赤、緑、青が黄色の兄弟サブビューであるフローレイアウトを考えると、
目標は、サブビュー(緑色としましょう)を一番上に移動することです。
インターフェイスビルダーでは、ドキュメントアウトラインのリストの上部に表示するビューを下部にドラッグするだけです。
または、ビューを選択してから、メニューで[エディター ] > [配置 ] > [最前面に移動]を選択します。
これをプログラムで行うには、いくつかの方法があります。
方法1
yellowView.bringSubviewToFront(greenView)
この方法は、上記のIBの回答とプログラム的に同等です。
サブビューが互いに兄弟である場合にのみ機能します。
サブビューの配列はに含まれていyellowView.subviews
ます。ここでbringSubviewToFront
は、greenView
インデックス0
をからに移動し2
ます。これは、
print(yellowView.subviews.indexOf(greenView))
方法2
greenView.layer.zPosition = 1
0
他のすべてのビューに対するものであるため、結果は上にあるgreenView
ように見えます。ただし、配列のインデックス0
には残りyellowView.subviews
ます。ただし、これは予期しない結果を引き起こす可能性があります。これは、タップイベントなどが引き続き、インデックス番号が最も大きいビューに最初に移動するためです。そのため、上記の方法1を使用することをお勧めします。zPosition
設定することができCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
それが上にあることを保証するために、スウィフトの古いバージョンでは)。[parentView bringSubviewToFront:view] ;
iOSでzPositionを使用できます
salonDetailViewという名前のビューがある場合、
例:@IBOutlet weak var salonDetailView: UIView!
GMSMapViewの UIViewがあります。
例:@IBOutlet weak var mapViewUI: GMSMapView!
mapViewUIの上部にあるsalonDetailViewを表示するには
以下のようにzPositionを使用します
salonDetailView.layer.zPosition = 1