2017-02-14 3 views
0

私は迅速なプロジェクトでiCarouselを使うのが大好きですが、克服できなかったことが1つあります。プロジェクトのビューのレイアウトにビジュアル言語を使用したいのですが、iCarouselのビジュアルフォーマットを使用するたびに機能しません。SwiftのiCarouselでビジュアルフォーマット言語を使用する

私はこの問題がTopMenuCarousel.translatesAutoresizingMaskIntoConstraints=false属性であることに気付きました。

この属性を無効にすると、ビジュアルフォーマットの制約はiCarouselでは無効になり、有効にすると制約は完全に機能しますが、iCarouselはスクロールして常にそのままになりません。

現在のコード:あなたのiCarouselオブジェクトに任意の高さを設定していないよう

import UIKit 
import iCarousel 

class Step2_HomePage: UIViewController,iCarouselDelegate,iCarouselDataSource  { 


let TopMenuCarouselCount = 5 

    var TopMenuCarousel = iCarousel() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print("Step2HomePage icinde") 



    TopMenuCarousel = iCarousel(frame: CGRect()) 
    view.addSubview(TopMenuCarousel) 
    // TopMenuCarousel.clipsToBounds = true 
    TopMenuCarousel.type = .Linear 
    TopMenuCarousel.dataSource = self 
    TopMenuCarousel.delegate = self 






let views = [ "TopMenuCarousel": TopMenuCarousel ] 

    // 2 
    var allConstraints = [NSLayoutConstraint]() 



    let TopMenuCarouselTop = NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-100-[TopMenuCarousel]", 
     options: [], 
     metrics: nil, 
     views: views) 
    allConstraints += TopMenuCarouselTop 

    let TopMenuCarouselHorizontal = NSLayoutConstraint.constraintsWithVisualFormat(
     "H:|-0-[TopMenuCarousel]-0-|", 
     options: [], 
     metrics: nil, 
     views: views) 
    allConstraints += TopMenuCarouselHorizontal 



    TopMenuCarousel.translatesAutoresizingMaskIntoConstraints=false 
    NSLayoutConstraint.activateConstraints(allConstraints) 




    // Do any additional setup after loading the view, typically from a nib. 
} 

func numberOfItemsInCarousel(carousel: iCarousel) -> Int { 
    print("carousel number") 
    return TopMenuCarouselCount 

} 

func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView { 
    print("carousel view icinde") 
    let tempView = UIView(frame: CGRect(x: 0, y: 0 , width: 20, height: 20)) 

    tempView.backgroundColor = UIColor.blueColor() 
    return tempView 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 

答えて

0

が見えます。最初の制約を次のように変更してみてください。

let TopMenuCarouselTop = NSLayoutConstraint.constraintsWithVisualFormat(
    "V:|-100-[TopMenuCarousel(20)]", 
    options: [], 
    metrics: nil, 
    views: views) 

元のコードの完全修飾バージョンです。私はビューをより大きくしました(あなたのものは20x20でした)、何が起こっているのかを見やすくするために色を付けました。

import UIKit 
import iCarousel 

class Step2_HomePage: UIViewController,iCarouselDelegate,iCarouselDataSource { 

    // array of colors to make it easy to see the individual Carousel views 
    let arrayOfColors = [ UIColor.blueColor(), UIColor.redColor(), UIColor.yellowColor(), UIColor.orangeColor(), UIColor.greenColor()] 

    let TopMenuCarouselCount = 5 

    var TopMenuCarousel = iCarousel() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print("Step2HomePage icinde") 

     self.view.backgroundColor = UIColor.lightGrayColor() 

     // initialize the TopMenuCarousel object 
     TopMenuCarousel = iCarousel(frame: CGRect()) 

     // add TopMenuCarousel to the view 
     view.addSubview(TopMenuCarousel) 

     // if clipsToBounds == true, TopMenuCarousel subviews will be clipped to the TopMenuCarousel frame 
     // default is false 

     //  TopMenuCarousel.clipsToBounds = true 

     TopMenuCarousel.type = .Linear 
     TopMenuCarousel.dataSource = self 
     TopMenuCarousel.delegate = self 

     TopMenuCarousel.backgroundColor = UIColor.purpleColor() 

     let views = [ "TopMenuCarousel": TopMenuCarousel ] 

     var allConstraints = [NSLayoutConstraint]() 

     // position TopMenuCarousel 100 from the Top, with a Height of 200 
     let TopMenuCarouselTop = NSLayoutConstraint.constraintsWithVisualFormat(
      "V:|-100-[TopMenuCarousel(200)]", 
      options: [], 
      metrics: nil, 
      views: views) 

     allConstraints += TopMenuCarouselTop 

     // set TopMenuCarousel to stretch the full Width of the view 
     let TopMenuCarouselHorizontal = NSLayoutConstraint.constraintsWithVisualFormat(
      "H:|-0-[TopMenuCarousel]-0-|", 
      options: [], 
      metrics: nil, 
      views: views) 

     allConstraints += TopMenuCarouselHorizontal 

     // this property *must* be set to false 
     TopMenuCarousel.translatesAutoresizingMaskIntoConstraints=false 

     NSLayoutConstraint.activateConstraints(allConstraints) 

    } 

    func numberOfItemsInCarousel(carousel: iCarousel) -> Int { 
     print("carousel number \(TopMenuCarouselCount)") 
     return TopMenuCarouselCount 
    } 

    func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView { 
     print("carousel view icinde", index) 

     // create a 200 x 160 view to add to TopMenuCarousel 
     let tempView = UIView(frame: CGRect(x: 0, y: 0 , width: 200, height: 160)) 

     // give it one of the colors 
     tempView.backgroundColor = arrayOfColors[index % arrayOfColors.count] 

     return tempView 
    } 

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


} 
+0

こんにちはみんな、 はUnfortuntelyそれがうまくいきませんでした:( をあなたが示唆したように、私はやったけどconstaintで宣言されているように、この時間は、iCarouselビューは、垂直方向の高さを持っていませんでした。 ビューが最も左に登場。私たちのいずれかの「縦」調整で画面の隅まで 何の理由することができ、私は削除の方法、次の行では:? 'TopMenuCarousel.translatesAutoresizingMaskIntoConstraints = false'を私はあなたに完全なを与えるために私の答えを編集した –

+0

例...追加された制約が機能するには、 'TopMenuCarousel.translatesAutoresizingMaskIntoConstraints' *をfalseに設定する必要があります。 – DonMag

0

制約が作成され、活性化されるがビューに追加されることはありません、あなたが使用する必要があります。

view.addConstraints(allConstraints) 

NSLayoutConstraint.activateConstraints(allConstraints) 

後DonMagが述べたようにも、一切の高さの制約が存在しません、つまり、iCarouselビューに正しい固有サイズがない場合、表示されず、DonMagが書いた例のように明示的な高さを追加する必要があります。

+0

これは以前の状況です...アップルのドキュメントから:iOS 8.0以降で開発する場合は、addConstraints:メソッドを直接呼び出す代わりに、NSLayoutConstraintクラスのactivateConstraints:メソッドを使用してください。 activateConstraints:メソッドは自動的に制約を正しいビューに追加します.' https://developer.apple.com/reference/uikit/uiview/1622513-addconstraints – DonMag

+0

うわー、私はそれを知らなかった。あなたが言ったように、唯一の問題は高さでなければなりません! – omarzl

+0

こんにちはみんな、 はUnfortuntelyそれがうまくいきませんでした:( あなたが示唆したように、私がやった が、今回は、iCarouselビューはconstaintで宣言されているように垂直方向の高さを持っていませんでした。 ビューが最も左のアップコーナーに登場しました 私が削除した方法では、次の行が表示されます。 'TopMenuCarousel。translatesAutoresizingMaskIntoConstraints = false' –

関連する問題