2016-05-05 10 views
2

私は、UIView(ParentView)とUIScrollview(ScrollView)を持つView Controllerを持っています。 ParentViewは、ViewControllerの先頭、末尾、上端および下端に固定されています。 ScrollViewは、ParentViewの先頭、末尾、上端および下端に固定されています。構造は次のようなものです:ScrollViewのAutoLayoutを修正するには?

次に、イメージとラベルを持つxibファイルを作成しました。 xibはScrollViewに動的に追加されます。 xibフレームの高さと幅はScrollViewの高さと幅に等しい。

iphone 6でシミュレータを実行すると、スクロールが完全に機能します。 xibの幅はまさに画面の幅です。しかし、iphone 6でシミュレータを実行すると、xibの幅が画面のサイズと同じになり、次の項目にスクロールするときに余分なスペースがあります。私はそれを削除するために何をすべきですか?

この

enter image description here

そしてここでは私のコードである。これは、iphone用のスクリーンショット6.お知らせ第2のスクリーンの余分なスペースでスクリーンiphone 6のためのショットプラス

enter image description here

です:

import UIKit 
class ViewController: UIViewController { 
@IBOutlet weak var ParentView: UIView! 
@IBOutlet weak var ScrollView: UIScrollView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let photos = ["joe", "john"] 
    let userNames = ["joe", "john"] 
    self.ScrollView.frame = CGRectMake(0, 0, self.ParentView.frame.size.width, self.ParentView.frame.size.height) 

    self.ScrollView.contentSize = CGSizeMake(self.ParentView.frame.size.width * CGFloat(photos.count), self.ParentView.frame.size.height) 
    self.ScrollView.pagingEnabled = true 
    var i: Int = 0 
    while i < 2 { 
     if let userXib = NSBundle.mainBundle().loadNibNamed("User", owner: self, options: nil)[0] as? User { 
      userXib.frame = CGRect(x: self.ScrollView.frame.size.width * CGFloat(i), y: 0, width: self.ScrollView.frame.size.width, height: userXib.frame.size.height) 
      userXib.assignValues(photos[i], myName: userNames[i]) 
      self.ScrollView.addSubview(userXib) 
     } 
     i = i + 1 
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 

UPDATE#1 - Coder1000ソリューション: 私はIMPを試してみました#3 &#4をスクロールの内側に追加することで、#4を答えてください。私はそれをScrollMainViewと呼んだ。ストーリーボードでは、スーパービューを埋めるために、先頭、末尾、上端と下端を設定しました。スクロールビューではなく、スクロールビューではなくループにこれらの要素を追加しました。 今、スクロールはスクロールしません!私のコードと、このような最終的な表示を見て:

import UIKit 
class ViewController: UIViewController { 
@IBOutlet weak var ParentView: UIView! 
@IBOutlet weak var ScrollView: UIScrollView! 
@IBOutlet weak var ScrollMainView: UIView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    let photos = ["joe", "john"] 
    let userNames = ["joe", "john"] 
    self.ScrollView.frame = CGRectMake(0, 0, self.ParentView.frame.size.width, self.ParentView.frame.size.height) 
    self.ScrollView.contentSize = CGSizeMake(self.ParentView.frame.size.width * CGFloat(photos.count), self.ParentView.frame.size.height) 
    self.ScrollView.pagingEnabled = true 
    self.ScrollMainView.frame = CGRectMake(0, 0, self.ScrollView.frame.size.width, self.ScrollView.frame.size.height) 
    print("the frame for parentview is: \(self.ParentView.frame)") 
    var i: Int = 0 
    while i < 2 { 
     if let userXib = NSBundle.mainBundle().loadNibNamed("User", owner: self, options: nil)[0] as? User { 
      userXib.frame = CGRect(x: self.ScrollMainView.frame.size.width * CGFloat(i), y: 0, width: self.ScrollMainView.frame.size.width, height: userXib.frame.size.height) 
      userXib.assignValues(photos[i], myName: userNames[i]) 
      self.ScrollMainView.addSubview(userXib) 
     } 
     i = i + 1 
    } 
    self.ScrollView.addSubview(ScrollMainView) 
     } 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

enter image description here

+0

にコードを置くことができますすることができますスクロールビューのレイアウトは、私に多くの白髪を与えました。残念ながら、私はXamarin/C#を使用していますが、Swiftは使用していません。したがって私は、プログラムレイアウトと、Cirrious.Fluentlayoutという優れたパッケージ/ライブラリを使用することで、私の問題を解決しました。私はすべての問題を一挙に解決し、とても使いやすいものでした。それはあなたからすべてのレイアウト混乱を隠します。 – Marakai

答えて

2

はフレームが正しく設定されていないのviewDidLoadにいくつかのソリューションは、あなたがそれを頼むときに、それは間違っている、があります。

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    self.ScrollView.frame = CGRectMake(0, 0, self.ParentView.frame.size.width, self.ParentView.frame.size.height) 

    self.ScrollView.contentSize = CGSizeMake(self.ParentView.frame.size.width * CGFloat(photos.count), self.ParentView.frame.size.height) 
    self.ScrollView.pagingEnabled = true 

    for subView: UIView in self.ScrollView.subviews { 
     if subView is User { subView.removeFromSuperview() 
    } 

    var i: Int = 0 
    while i < 2 { 
     if let userXib = NSBundle.mainBundle().loadNibNamed("User", owner: self, options: nil)[0] as? User { 
      userXib.frame = CGRect(x: self.ScrollView.frame.size.width * CGFloat(i), y: 0, width: self.ScrollView.frame.size.width, height: userXib.frame.size.height) 
      userXib.assignValues(photos[i], myName: userNames[i]) 
      self.ScrollView.addSubview(userXib) 
     } 
     i = i + 1 
    } 
}  

それとも:

parentViewとあなたのscrollViewが後に自動レイアウトの制約によって調整されていますが、ユーザービューではありません...

簡単な解決策は、内のコードを配置することが可能カスタムxibにプログラムで制約を加えることができます。

またはあなたのcostomのxibsの配列を維持し、ちょうど彼らのフレームを調整し、viewDidLayoutSubviewsでSCROLLVIEW CONTENTSIZE、()

それとも、正しい自動取得viewDidAppear()

+0

他のオプションは必要ありません。 viewDidLayoutSubviewsの中にコードを置くだけで、そのトリックができました!私は多くの例を読んだが、誰もそれを言及しなかった、urg! – user1019042