31

없이 탐색 모음에 UIBarButtonItem을 기반으로 사용자 정의보기를 배치? iOS가 기본적으로 설정하는 ~ 10 점의 여백이있는 것으로 보입니다. 내가 왼쪽과 정의의 오른쪽에서 왼쪽과 오른쪽 UINavigationBar 항목에 수평 패딩을 제거하려면 어떻게 디폴트 수평 패딩

나는 (내가 내 자신의 backButtonItem을 설정하려고 포기, 그래서 난 그냥 leftBarButtonItem을 사용하고 있습니다) 왼쪽과 오른쪽 탐색 모음 버튼을 사용자 정의하고있다.

두 가지 경우 (왼쪽 또는 오른쪽) 이러한 사용자 정의 버튼을 누르면 Apple이 leftBarButtonItem의 왼쪽과 rightBarButtonItem의 오른쪽에 약간의 여백을 유지하는 것처럼 보입니다. UIButton의 사용자 정의 배경과 이미지 속성을 얼마나 넓게 만들지에 관계없이 사용자 정의보기로 왼쪽/오른쪽 바 버튼 항목 안에 배치합니다. UIBarButtonItems 더 "프레임"이 없기 때문에

난 내가 정상 UIViews을 할 수처럼 자신의 수퍼 내에서의 위치를 ​​수 없습니다 액세스 할 수 있습니다.

이 기본 덧 글을 제거하는 방법에 대한 제안 사항이 있으십니까? 내가 제로 너비로 줄이기 위해 노력하고있는 비트를 보려면 첨부 된 스크린 샷을 참조하십시오. 스크린 샷에서 플러스 아이콘은 오른쪽으로 이동 한 모습입니다. 그러나 강조된 배경 이미지는 아마도 그 인세 트를 사용하여, 오른쪽에 잘려나 가고 있음).

페이지의 이미지에 :

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action { 
    UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom]; 

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f); 

    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView addTarget:target action:action 
     forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
     initWithCustomView:customButtonView] autorelease]; 
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)]; 

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f); 

    return customButtonItem;  
} 
+0

+1 : 난 그냥 작은 패딩을 유지하고를 redid 그래서 나는이 문제를했고 세트를 things..including, 그냥 x 위치에 -10에서 이미지를 만드는의 숫자를 시도하고 운이 etc..had 없습니다 이미지를보다 적절하게 만들 수 있습니다. 행운을 빕니다. –

답변

82

55As는, 위의 내가 다른이 대답을 기반으로 갔다 솔루션 댓글을 달았습니다,하지만 매우 많은 관련 질문 : How to adjust UIToolBar left and right padding. 또한 iOS5를 사용하면 쉽게 작동 할 수 있으며 iOS5를 사용하면 하나가 아닌 왼쪽 또는 오른쪽에 여러 개의 버튼을 설정할 수 있습니다.

여기에 사용자 정의 버튼을 왼쪽 항목의 왼쪽에있는 패딩을 제거하는 예이다 :

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view 

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge: 
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil]; 
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add 

// Add the two buttons together on the left: 
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil]; 

그리고 이와

는, 네비게이션 바의 왼쪽 막대 버튼 항목의 왼쪽 패딩이 사라 졌어요!

참고 : 이것은 iOS5 및 iOS6에서 저에게 효과적입니다. iOS7이 (공개 데모와) 상당히 다르다는 것을 감안할 때, iOS7의 초기 종자를 가진 사람들은이 해킹과 같이 의도하지 않은 무언가가 실제로 iOS6 이상으로 계속 작동하는지 테스트해야합니다.

+7

순서를 변경하지 않고 rightBarButtonItem에도 적용됩니다 (backButtonItem 및 negativeSpace의 순서를 뒤집어 놓을 수는 있지만 그렇지 않습니다) – Martin

+0

고맙습니다! – chourobin

+0

정말이 사람을 가져 주셔서 감사합니다! :) –

3

나는이 시도하고 작동 : 나는 내 사용자 지정 UIBarButtonItem을 만드는거야 방법을 참고로 https://skitch.com/starbaseweb/rj2e5/ios-simulator

, 여기에 (, 그것은 오른쪽 버튼이 경우입니다) :

1) -drawRect :를 전혀 사용하지 않고 불투명하지 않고 backgroundColor = [UIColor clearColor] 인 사용자 정의 UIToolbar 서브 클래스를 만듭니다.

2) 도구 모음을 사용자 지정보기로 사용하여 사용자 지정 UIBarButtonItem을 만듭니다.

3) 단추를 사용자 지정 도구 모음에 추가하십시오.

사용자 정의 도구 모음 재정의 -layoutSubviews 4)과 자신의 간격을한다.

+0

또 다른 트릭은 네비게이션 바를 어떻게 든 뷰포트보다 넓게 만들 수 있기 때문에 오른쪽 패딩이 잘리고 버튼이 올바른 위치에 나타납니다! 이는 UINavigationBar를 직접 관리하는 경우에만 작동합니다 (즉, 탐색 컨트롤러를 통하지 않고). –

+0

감사합니다 Evadne. 이 문제를 해결하기 위해 이전에 조치를 취했으나 제안 된 해결 방법을 확인하기 위해이 게시판으로 돌아가려고합니다. 따라서 허용 된 답변으로 표시 할 수 있습니다. – idStar

+0

iOS5를 사용하여보다 명확한 구현을 발견했습니다. 여기에 대한 답변을 참조하십시오 : http://stackoverflow.com/questions/6021138/how-to-adjust-uitoolbar-left-and-right-padding/7042201#7042201이 솔루션을 테스트 한 결과 작동했습니다. 두 줄의 코드와 최소한의 방해물. – idStar

관련 문제