2017-10-18 7 views
-1

UIScrollView 아래 화면에 일정한 너비의 UIImageView가 있습니다. iphone 5s에서는 잘 작동하지만 아이폰 7 또는 8에서는 이미지의 너비가 너비보다 작습니다. 화면 크기는 스크린 샷에서 공유됩니다. 여기 UIScrollview의 UIImageView가 맨 위 화면에 맞지 않습니다.

내 코드입니다 : 여기
let x = CGFloat(selectedEvent.album?.count ?? 0) 

    pageControl.numberOfPages = (selectedEvent.album?.count ?? 0) 

    for index in 0..<(selectedEvent.album?.count ?? 0) { 

     frame.origin.x = scroll.frame.size.width * CGFloat(index) 
     frame.size = scroll.frame.size 

     print(self.frame.size.width) 
     print(scroll.frame.size.width) 
     print(frame.size.width) 

     let image = UIImageView(frame: frame) 
     image.contentMode = .scaleToFill 

     print(image.frame.size.width) 

     if (selectedEvent.album?.count ?? 0) > 0 { 
      selectedEvent.getAlbumImage(key: selectedEvent.album![index], completion: { (gotImage:UIImage) in 
       image.image = gotImage 
      }) 
     } else { 
      image.image = UIImage(named: "defaultImage.jpg") 
     } 

     scroll .addSubview(image) 
    } 

    self.scroll.contentSize = CGSize(width: scroll.frame.size.width * x, height: scroll.frame.size.height) 
    pageControl.addTarget(self, action: #selector(self.changePage(sender:)), for: UIControlEvents.valueChanged) 

가 인쇄 로그인 반바지에

320.0 
320.0 
320.0 
320.0 
320.0 
320.0 
320.0 
320.0 

Iphone 8story boardIphone 5s Screenshot

+0

사용자가 scrollview 너비가 아닌 경우 [UIScreen mainScreen] .bounds.size.width;를 사용하십시오. ViewWillAppear 또는 ViewDidAppear에서 프레임을 계산합니다. – Kuldeep

+0

다음을 확인하십시오 : https://stackoverflow.com/questions/39021503/custom-view-self-frame-is-not-correct – Amit

+0

동일한 문제가 발생하여'layoutSubviews','setNeedsLayout' 및' layoutIfNeeded'입니다. 일하지 않았어. 그런 다음 가로 스크롤이있는'collectionView'로 scrollview를 제거했습니다. – Amit

답변

0

, 전망이있는 viewDidLoad 또는 ViewWillAppear 방법 대신에 프레임을 업데이트 한하지 않을 수 있습니다 보기는 스토리 보드 크기로 초기화됩니다. 따라서 iPhone 7 또는 기타 장치 용 rect가 업데이트되지 않습니다. 또 다른 이유는 scrollview가 자동으로 하위보기를 조정하기 때문입니다. 따라서 viewDidLoad()에서 비활성화하십시오. 이미 수행하고 업데이트 프레임 &있는 ScrollView 내용 viewDidLayoutSubviews의 변경 사항을 관련으로

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.scroll.contentInsetAdjustmentBehavior = .never; 

    // write your code 

    } 

당신의 viewDidLoad에() 메소드를 하위 뷰를 추가해야합니다().

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews(); 
    for view:UIView in self.scroll.subviews { 
     frame.origin.x = self.scroll.frame.size.width * CGFloat(self.scroll.subviews.index(of: view)!); 
     frame.size = scroll.frame.size 
     view.frame = frame; 
    } 

    self.scroll.contentSize = CGSize(width: scroll.frame.size.width * selectedEvent.album?.count , height: scroll.frame.size.height) 
} 

희망.

0

프레임 너비를 화면 너비로 설정합니다. 다음과 같이 사용 :

let size = UIScreen.main.bounds.size 

self.scroll.contentSize = CGSize(width: size.width, height: scroll.frame.size.height)