레이블이 UINavigationBar인 게시물을 표시합니다. 모든 게시물 표시
레이블이 UINavigationBar인 게시물을 표시합니다. 모든 게시물 표시

2016년 9월 26일 월요일

UINavigationbar 1px bottom line 제거 하기

http://stackoverflow.com/questions/19226965/how-to-hide-ios7-uinavigationbar-1px-bottom-line

네비게이션 바를 추가 하면 위와 같이 네비게이션바의 색상과 view의 색상이 일치 할때도 
1px  라인이 하나 있다.

이것을 제거 하려면 어떻게 해야 하는가?


stackoverflow에 아름다운 방법이 있었다.

저 밑줄의 view를 찾아 내서 hidden 시켜 버리는 것이다.

private var shadowImageView: UIImageView?
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.hidden = true
    }
    
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        
        shadowImageView?.hidden = false
    }
    
    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }
        
        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }


UIImage 이면서 height 가 1인 view를 찾아서 그것을  viewWillAppear() 메서드에서 hidden을 시키는... UIImage height가 1인 디자인을 추가 하지 않는한 정상적으로 동작 한다.


2016년 1월 23일 토요일

네비게이션 바에 컬러 아이콘으로 버튼을 만들고 거기에 넘버링 까지 하려면



이러한 화면을 구성 하려면 어찌 합니까? 어떻게 할까요?

우선 네비게이션바에 바버튼 이미지는 단색으로 설정된다.

        let btImage = Helper.textToImage("1", inImage: UIImage(named: "bt_topmenu_bell_on")!, atPoint: CGPoint(x: 26, y: 21))
        
        

        let rightButton2: UIBarButtonItem = UIBarButtonItem(image: btImage.imageWithRenderingMode(.AlwaysOriginal), style: UIBarButtonItemStyle.Plain, target: self, action: "")


위 코드에서  btImage.imageWithRenderingMode(.AlwaysOriginal) 
이를 설정 해 줘야 네비게이션바에 바버튼 이미지를 원래 색상으로 처리 한다.

btImage 즉 벨 아이콘에 숫자 넘버링을 위한 코드는 helper 클래스를 만들어서 이용 하였다.

아무데서나 편하게 쓰기 위한 helper 클래스를 만들고 거기에 
text와 이미지, 그리고 포지션을 주면 이미지위에  text를 표시하는 함수를 작성 해서 이용한다.

// 이미지 위에 글 쓰기 (넘버링)
    static func textToImage(drawText: NSString, inImage: UIImage, atPoint:CGPoint)->UIImage{
        
        // Setup the font specific variables
        let textColor: UIColor = UIColor.whiteColor()
        let textFont: UIFont = UIFont(name: "Helvetica Bold", size: 9)!
        
        //Setup the image context using the passed image.
        UIGraphicsBeginImageContext(inImage.size)
        
        //Setups up the font attributes that will be later used to dictate how the text should be drawn
        let textFontAttributes = [
            NSFontAttributeName: textFont,
            NSForegroundColorAttributeName: textColor,
        ]
        
        //Put the image into a rectangle as large as the original image.
        inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height))
        
        // Creating a point within the space that is as bit as the image.
        let rect: CGRect = CGRectMake(atPoint.x, atPoint.y, inImage.size.width, inImage.size.height)
        
        //Now Draw the text into an image.
        drawText.drawInRect(rect, withAttributes: textFontAttributes)
        
        // Create a new image out of the images we have created
        let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        
        // End the context now that we have the image we need
        UIGraphicsEndImageContext()
        
        //And pass it back up to the caller.
        return newImage
    }



2016년 1월 11일 월요일

네비게이션바의 버튼 위치 조정 하기



to



어찌 합니까? 어떻게 할까요?

디자인 가이드를 맞추기가 어렵다.

    //left 슬라이드 메뉴
    public func addLeftBarButtonWithImage(buttonImage: UIImage) {
        let leftButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.Plain, target: self, action: "toggleLeft")
        navigationItem.leftBarButtonItem = leftButton;

    }


네비게이션바에 버튼을 추가 하면 첫번째 화면 처럼 된다.
이걸 하단 처럼 하려면

UIButton을 생성 하고 frame을 조정, contentEdgeInset을 조정 하고
UIBarButtonItem을 customView로 버튼을 지정 하는 방법을 시도 했다.
삽질이었다.

결국 간단한 방법을 찾았다.

UIBarButtonItem 중에는 가운데 스페이스 등을 지정 하는 스페이스 아이템을 버튼과 버튼 사이에 넣을수 있다.

왼쪽 left, 오른쪽 right의 그러한 스페이스를 추가 하고 음수 값을 정해서
왼쪽 버튼을 더 왼쪽으로 , 오른쪽 버튼을 더 오른쪽으로 붙일 수  있다.

그래서 다음과 같은 코드가 위 두번째 화면 과 같은 결과를 보여 준다.

    //left 슬라이드 메뉴
    public func addLeftBarButtonWithImage(buttonImage: UIImage) {
        let leftButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.Plain, target: self, action: "toggleLeft")
        
        let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .FixedSpace,
            target: nil, action: nil)
        
        negativeSpacer.width = -16
        
        navigationItem.setLeftBarButtonItems([negativeSpacer, leftButton], animated: false)
    }