Programer/iOS

[Swift] tableViewContorler에서 navigation를 사용시 배경화면 문제

아즈샤 2015. 11. 6. 14:17
반응형

문제 : navigation bar를 포함하고 있는 table view 에서 배경 화면을 전체로 사용하고 싶은데...

일단 navigation bar와 table view 화면이 분리되어 있어 쉽지 않았다.


stack overflow에서 주는 해답은 tableview의 background view 를 사용하라는 것이었는데, 이건 navigation bar에는 나오지 않았다.

두번째 시도는 addsubview 를 이용해서 맨 아래로 보내는 방법이었는데 역시 navigation bar에는 적용이 안되어서 실패.


결국 마지막으로 처리한 것은 배경 이미지를 navigation bar 높이로 짤려 붙히고 나머지 짤린 배경을 table view에 붙히는 방법이었다. 아래 소스를 참고하기 바란다.


//네비게이션 바 & 테이블 뷰 배경화면 설정

let bgImage = imageResize((UIImage(named: "test.png"))! as UIImage, sizeChange: CGSizeMake(self.view.frame.size.width, self.view.frame.height))

let naviImage = bgImage.crop(CGRect(x: 0,y: 0,width: self.view.frame.size.width,height: 64))

self.navigationController!.navigationBar.setBackgroundImage(naviImage,

            forBarMetrics: .Default)

let tableBgImage = bgImage.crop(CGRect(x: 0,y: 64,width: self.view.frame.size.width,height: self.view.frame.size.height-64))

tableView.backgroundView = UIImageView(image: tableBgImage)

self.navigationController!.navigationBar.translucent = false



crop 함수는 extension한 함수인대 내용은 다음과 같다.


extension UIImage {

    func crop(var rect: CGRect) -> UIImage {

        rect.origin.x*=self.scale

        rect.origin.y*=self.scale

        rect.size.width*=self.scale

        rect.size.height*=self.scale

        

        let imageRef = CGImageCreateWithImageInRect(self.CGImage, rect)

        let image = UIImage(CGImage: imageRef!, scale: self.scale, orientation: self.imageOrientation)

        return image

    }

}


혹시 다른 심플한 방법이 있으면 알려주기 바란다. ㅠㅠ

반응형