2017년 2월 27일 월요일

[IOS][swift] UICollectionView, UICollectionViewFlowLayout의 마지막 row만 이상하게 나오는 문제

와 진짜 이건 너무 하다 싶다
UICollectionView로 FlowLayout을 세로로 해서 작업중인데,
유독 마지만 라인만 뭔가 이상하다..

이렇게 나오는데 뭐 이유도 모르겠고 미치는 줄..
검색 해보니 Apple의 버그라는데..
IOS6부터 있었나 본데, 그럼 이건 버그가 아니고 스팩 아님?
여튼 수정 하려면,

class TestLayout: UICollectionViewFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)
        let contentSize = collectionViewContentSize
        return attributes?.filter { $0.frame.maxX <= contentSize.width && $0.frame.maxY < contentSize.height }
    }

}

이런식으로 서브클래스를 생성해서 이 클래스를 레이아웃으로 지정해 주면된다.
아래는 참고한 스택 오버 플로우 링크
http://stackoverflow.com/questions/12927027/uicollectionview-flowlayout-not-wrapping-cells-correctly-ios

[IOS][InterfaceBuilder] Xcode에서 xib파일 작업중 Assistant 윈도우로 연결된 파일이 보이지 않을때..

Xcode에서 xib 파일 작업중 갑자기 잘되던 file's owner 파일이 표시 되지 않는다.
실수로 뭔가 바꿨나 해서 이것 저것 살펴 보고 코드 롤백도 해보았지만 여전히 먹통..
혹시나해서 derived data를 지우니 된다!!!
(Xcode를 완전히 지운 다음 derived data 삭제 하자)
Xcode를 재기동 하면 바로는 안뜨고 몇초 기다리니 떴다 (당황하지 말자)
어쨌든 나쁜 Xcode

2017년 2월 21일 화요일

[IOS][SWIFT] UIPageViewController 크래쉬


아래 처럼 죽는 경우가 발생

2017-02-22 13:29:28.984 PageTest[87046:5081125] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (3) doesn't match the number required (1) for the requested transition'

* 원인 
setViewControllers([vc1, vc2, vc3], direction: .forward, animated: false, completion: nil)
첫 번째 인자에 필요이상의 뷰컨트롤러를 할당함

* 수정
setViewControllers([vc1], direction: .forward, animated: false, completion: nil)
vc1만 할당 하고 나머지는 DataSource에서 처리 하도록 함

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let index = vcs.index(of: viewController)
            else { return nil }

        if index < 1 {
            return nil
        } else {
            return vcs[index - 1]
        }
    }

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let index = vcs.index(of: viewController)
            else { return nil }

        if index + 1 >= vcs.count {
            return nil
        } else {
            return vcs[index + 1]
        }
    }