2017-02-14 11 views
0

빠른 프로젝트에서 iCarousel을 사용하는 것을 좋아하지만 극복 할 수없는 한 가지가 있습니다. 프로젝트의 뷰 레이아웃에 비주얼 언어를 사용하고 싶지만 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가 :( 당신이 제안 내가 한 하지만,이 시간을 작동하지 않았다는 iCarousel보기 constaint에 선언 수직 높이를하지 않았다. 는보기는 가장 왼쪽에 등장 . 우리의 모든 "수직"조정하여 화면의 모서리까지 어떤 이유가있을 수 있습니다 내가 삭제 방법, 다음 행으로? 'TopMenuCarousel.translatesAutoresizingMaskIntoConstraints = FALSE '내가 당신에게 전체를 제공하는 내 대답을 편집 –

+0

예 ... 추가 된 제약 조건이 작동하려면'TopMenuCarousel.translatesAutoresizingMaskIntoConstraints' *가 false로 설정되어야합니다. – DonMag

0

제약이 작성되고 활성화되지만 뷰에 추가되지 않습니다, 당신은 사용해야합니다

view.addConstraints(allConstraints) 

NSLayoutConstraint.activateConstraints(allConstraints) 

후 DonMag가 언급 한 바와 같이 또한, 더 높이 제약이 없다, 즉, iCarousel 뷰에 정확한 고유 크기가 없으면 표시되지 않으며 DonMag에서 작성한 예제와 같이 명시적인 높이를 추가해야합니다.

+0

그럴 필요가있었습니다 ... Apple의 문서에서 : 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' –