2017-05-21 2 views
0

デバイスが横向きであるが縦長ではないときに、スクロールビューが画面全体を占めようとしています。これはポートレートモードでの私の表示です。私はyoutubeアプリがビデオで動作するようにこれを動作させたい。任意のコード例では、これは私が私のスクロールビューをどのように設定していますされスクロールスクロールビューフルスクリーン表示時

enter image description here

非常に参考になる

DispatchQueue.main.async(execute: {() -> Void in 
      let imgURL = NSURL(string: self.property[i].image) 
      let data = NSData(contentsOf: (imgURL as URL?)!) 
      let imageView = UIImageView() 
      imageView.image = UIImage(data: data! as Data) 
      let xPosition = self.view.frame.width * CGFloat(i) 
      imageView.frame = CGRect(x: xPosition, y: 0, width: self.imageScrollView.frame.width, height: self.imageScrollView.frame.height) 

      self.imageScrollView.contentSize.width = self.imageScrollView.frame.width * CGFloat(i + 1) 
      self.imageScrollView.addSubview(imageView) 
     }) //End DispatchQueue 

答えて

1

は、あなたがこのビューの自動レイアウト使用しています ?向きが変化した場合ので、あなたのニーズにscrollviewのconstarintsを変更することができた場合(あなたはUIDeviceOrientationDidChangeNotificationを使用することができます)、またはあなたは、単にコード内枠を設定している場合は、あなたのviewwillappearでフレーム調整に応じて

レジスタの通知を行う

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

と向きで呼び出されます。この方法が変わる

-

(void)orientationChanged:(NSNotification *)notification{ 

switch ([[UIApplication sharedApplication] statusBarOrientation]) 
    { 
     case UIInterfaceOrientationPortrait: 
     case UIInterfaceOrientationPortraitUpsideDown: 
     { 
     //set frame/ constarints for portrait  
     } 

      break; 
     case UIInterfaceOrientationLandscapeLeft: 
     case UIInterfaceOrientationLandscapeRight: 
     { 
     //set frame/ constarints for landscape 
     } 
      break; 
     case UIInterfaceOrientationUnknown:break; 
    } 

} 

オブザーバーを削除することを忘れないでください。

-(void)viewDidDisappear:(BOOL)animated{ 
    [super viewDidDisappear:animated]; 
    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; 
}