IOS 7 में UINavigationbar के नीचे UISegmentedControl


97

मैं इसे नीचे के UISegmentedControlहिस्से के रूप में कैसे बनाऊं UINavigationBar? क्या यह जुड़ा हुआ है UINavigationBarया यह एक पूर्ण पृथक दृश्य है जिसे अभी उप- UINavigationControllerदृश्य नियंत्रक के रूप में जोड़ा गया है । ऐसा लगता है कि यह उस हिस्से का हिस्सा है UINavigationBarक्योंकि बार के नीचे एक छाया है।

यहां छवि विवरण दर्ज करें


क्या आपके लिए नावबार पर डिफ़ॉल्ट ब्लर इफेक्ट रखना महत्वपूर्ण है?
वोकिलम

जवाबों:


150

इसे पूरा करने के लिए एक सरल प्रभाव है।

सबसे पहले, एक सेगमेंट को टूलबार में रखें। इस टूलबार को नेविगेशन बार के ठीक नीचे रखें। आपके विचार नियंत्रक को उपकरण पट्टी के प्रतिनिधि निर्धारित करें, और वापसी UIBarPositionTopAttachedमें positionForBar:। आप स्टोर ऐप में देख सकते हैं, यदि आप एक इंटरैक्टिव पॉप इशारा करते हैं, तो सेगमेंट बार नेविगेशन बार के समान नहीं चलता है। ऐसा इसलिए है क्योंकि वे एक ही बार नहीं हैं।

यहां छवि विवरण दर्ज करें

अब हेयरलाइन हटाने के लिए। "हेयरलाइन" एक UIImageViewऐसा है जो नेविगेशन बार का एक उपक्षेत्र है। आप इसे ढूंढ सकते हैं और इसे छिपे हुए के रूप में सेट कर सकते हैं। यह ऐप्पल अपने मूल कैलेंडर ऐप में करता है, उदाहरण के लिए, स्टोर ऐप भी। जब वर्तमान दृश्य गायब हो जाए तो इसे दिखाना याद रखें। यदि आप ऐप्पल ऐप के साथ थोड़ा खेलते हैं, तो आप देखेंगे कि हेयरलाइन को छिपाया गया है viewWillAppear:और दिखाया गया हैviewDidDisappear:

खोज पट्टी की शैली को प्राप्त करने, बस बार के सेट searchBarStyleकरने के लिए UISearchBarStyleMinimal


6
अच्छा उत्तर! TableView की contentInset अद्यतन करने के लिए उपकरण पट्टी से बचने के लिए सामग्री को कवर करने के :-) मत भूलना
LombaX

1
"इस टूलबार को नेविगेशन बार के ठीक नीचे रखें।" सुपरव्यू क्या होना चाहिए?
कोन्या जूल

1
@Koen आपका उपयोग मामला अधिक जटिल है। एक कंटेनर दृश्य नियंत्रक बनाएं, और वहां अपना सेगमेंट जोड़ें। फिर खंड नियंत्रक के तहत अन्य नियंत्रकों को बाल नियंत्रक के रूप में जोड़ें।
सिंह नटन

2
फिर भी उलझन में है कि टूलबार को जोड़ने का सबसे अच्छा तरीका क्या है, क्या मुझे फ्रेम को हार्डकोड करना चाहिए initWithRect: CGRectMake(0, self.toplayoutGuide.length, 320, 44), या शायद इसे स्थिति में लाने के लिए ऑटोलयूट का उपयोग करना चाहिए? चाइल्डव्यू के नए शीर्ष क्या होंगे, क्या यह होगा self.toplayoutGuide.length + 44?
कोन्या

1
@Vrutin बार बटन आइटम का उपयोग न करें। इसके बजाय, टूलबार के उप दृश्य के रूप में जोड़ें। फिर आप टूलबार के आकार को सेट कर सकते हैं।
लियो नटन

14

अब हेयरलाइन हटाने के लिए। "हेयरलाइन" एक UIImageView है जो नेविगेशन बार का एक उपक्षेत्र है। आप इसे ढूंढ सकते हैं और इसे छिपे हुए के रूप में सेट कर सकते हैं। यह ऐप्पल अपने मूल कैलेंडर ऐप में करता है, उदाहरण के लिए, स्टोर ऐप भी। जब वर्तमान दृश्य गायब हो जाए तो इसे दिखाना याद रखें। यदि आप Apple ऐप्स के साथ थोड़ा खेलते हैं, तो आप देखेंगे कि हेयरलाइन को viewWillAppear पर छिपाया गया है: और viewDisDisappear में दिखाया गया है।

एक और तरीका यह होगा कि हेयरलाइन को देखें और उसे जोड़ा टूलबार के नीचे ले जाएं। यहां वह है जो मैंने जुटाया।

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIToolbar *segmentbar;
@property (weak, nonatomic) UIImageView *navHairline;
@end

@implementation ViewController

#pragma mark - View Lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    // find the hairline below the navigationBar
    for (UIView *aView in self.navigationController.navigationBar.subviews) {
        for (UIView *bView in aView.subviews) {
            if ([bView isKindOfClass:[UIImageView class]] &&
                bView.bounds.size.width == self.navigationController.navigationBar.frame.size.width &&
                bView.bounds.size.height < 2) {
                self.navHairline = (UIImageView *)bView;
            }
        }
    }
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self _moveHairline:YES];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self _moveHairline:NO];
}

- (void)_moveHairline:(BOOL)appearing
{
    // move the hairline below the segmentbar
    CGRect hairlineFrame = self.navHairline.frame;
    if (appearing) {
        hairlineFrame.origin.y += self.segmentbar.bounds.size.height;
    } else {
        hairlineFrame.origin.y -= self.segmentbar.bounds.size.height;
    }
    self.navHairline.frame = hairlineFrame;
}

@end

मैंने इस समस्या को हल करने के लिए Apple NavBar कोड नमूना (कस्टमाइज़िंग UINavigationBar) भी बहुत उपयोगी पाया ।

इसके अलावा UIToolbar की शीर्ष सीमा को संभालना सुनिश्चित करें , यह दिखाई दे सकता है और आप इसे NavBar की हेयरलाइन के साथ भ्रमित कर सकते हैं। मैं भी चाहता था कि यूआईटूलबर बिल्कुल नवबर की तरह दिखे, आप शायद टूलबारbarTintColor को समायोजित करना चाहते हैं ।


13

इस विशेष समस्या के लिए एक प्रोटोकॉल ओरिएंटेड स्विफ्ट दृष्टिकोण है, जो स्वीकृत उत्तर के आधार पर ले रहा है:

HideableHairlineViewController.swift

protocol HideableHairlineViewController {

  func hideHairline()
  func showHairline()

}

extension HideableHairlineViewController where Self: UIViewController {

  func hideHairline() {
    findHairline()?.hidden = true
  }

  func showHairline() {
    findHairline()?.hidden = false
  }

  private func findHairline() -> UIImageView? {
    return navigationController?.navigationBar.subviews
      .flatMap { $0.subviews }
      .flatMap { $0 as? UIImageView }
      .filter { $0.bounds.size.width == self.navigationController?.navigationBar.bounds.size.width }
      .filter { $0.bounds.size.height <= 2 }
      .first
  }

}

SampleViewController.swift

import UIKit

class SampleViewController: UIViewController, HideableHairlineViewController {

  @IBOutlet private weak var toolbar: UIToolbar!
  @IBOutlet private weak var segmentedControl: UISegmentedControl!

  override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    hideHairline()
  }

  override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    showHairline()
  }


}

// MARK: UIToolbarDelegate
extension SampleViewController: UIToolbarDelegate {

  func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
    return .TopAttached
  }

}

"हेयरलाइन" है shadowImage नेविगेशन बार संपत्ति है।
एलएसआई

1
नमस्ते, क्या आप बता सकते हैं कि आपने इंटरफ़ेस बिल्डर में टूलबार को कैसे स्थान दिया है? ऑटो लेआउट? क्या आप ऊपर दिए गए एक्सटेंशन पर टिप्पणी कर सकते हैं और देख सकते हैं कि क्या होता है? मुझे नहीं लगता कि यह प्रभावी है।
एलएसआई

8

आप Apple नमूना कोड में UISegmentedControl के साथ नेविगेशन बार पा सकते हैं: https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html

या आप इसे प्रोग्रामेटिक रूप से बना सकते हैं, यहां दूसरे उत्तर में मेरे जवाब का कोड है, नेविगेशन बार में खंडित नियंत्रण जोड़ें और बटन के साथ शीर्षक रखें


6

मैं एक ही काम करना चाहता था .. और यह मिला:


1 - UINavigationBar उपवर्ग

//-------------------------
// UINavigationBarCustom.h
//-------------------------
#import <UIKit/UIKit.h>

@interface UINavigationBarCustom : UINavigationBar

@end


//-------------------------
// UINavigationBarCustom.m
//-------------------------
#import "UINavigationBarCustom.h"

const CGFloat MyNavigationBarHeightIncrease = 38.f;

@implementation UINavigationBarCustom


- (id)initWithCoder:(NSCoder *)aDecoder {
    
    self = [super initWithCoder:aDecoder];
    
    if (self) {
        [self initialize];
    }
    
    return self;
}

- (id)initWithFrame:(CGRect)frame {
    
    self = [super initWithFrame:frame];
    
    if (self) {
        [self initialize];
    }
    
    return self;
}

- (void)initialize {
    // Set tittle position for top
    [self setTitleVerticalPositionAdjustment:-(MyNavigationBarHeightIncrease) forBarMetrics:UIBarMetricsDefault];
}

- (CGSize)sizeThatFits:(CGSize)size {
    // Increase NavBar size
    CGSize amendedSize = [super sizeThatFits:size];
    amendedSize.height += MyNavigationBarHeightIncrease;
    
    return amendedSize;
}

- (void)layoutSubviews {
// Set buttons position for top
    [super layoutSubviews];
    
    NSArray *classNamesToReposition = @[@"UINavigationButton"];
    
    for (UIView *view in [self subviews]) {
        
        if ([classNamesToReposition containsObject:NSStringFromClass([view class])]) {
            
            CGRect frame = [view frame];
            frame.origin.y -= MyNavigationBarHeightIncrease;
            
            [view setFrame:frame];
        }
    }
}

- (void)didAddSubview:(UIView *)subview
{
    // Set segmented position
    [super didAddSubview:subview];
    
    if ([subview isKindOfClass:[UISegmentedControl class]])
    {
        CGRect frame = subview.frame;
        frame.origin.y += MyNavigationBarHeightIncrease;
        subview.frame = frame;
    }
}

@end

2 - उपवर्ग के साथ अपना नेविगेशनकंट्रोलर सेट करें

उपवर्ग के साथ अपना नैविगेशन कंट्रोलर सेट करें


3 - नेवीगेशन में अपने UISegmentedControl जोड़ें

यहां छवि विवरण दर्ज करें


4 - भागो और मस्ती -> दोनों पर एक ही रंग डालना मत भूलना

यहां छवि विवरण दर्ज करें


खोज स्रोत:

हैकिंग UINavigationBar

SO प्रश्न


कृपया ध्यान दें कि UINavigationButtonयह निजी एपीआई है, और इसे उपयोग करने के लिए आपका ऐप अस्वीकार कर दिया जाएगा। आपको उस वर्ग के उपयोग को विफल करने का प्रयास करना चाहिए।
सिंह नटण

@LeoNatan के बारे में खोज करने के बाद मैंने अपने ऐप को स्टोर करने का जोखिम लेने का फैसला किया क्योंकि यह मेरे उत्तर और ज़ैस में है! अनुमोदित
iTSangar

1
याद रखें कि यदि आप एक बार स्वीकृत हो जाते हैं, तो भी आपको भविष्य की तारीख में अस्वीकार कर दिया जाता है, या Apple भविष्य में प्रस्तुत करने को अस्वीकार कर सकता है। निजी एपीआई के उपयोग को छिपाने के लिए कम से कम काम करें।
सिंह नट

1
आपका समाधान बहुत अच्छा है, मैं नौसेना बार में कुछ भी जोड़ सकता हूं, लेकिन दुर्भाग्य से मैं किसी भी ऑब्जेक्ट पर क्लिक करने में सक्षम नहीं हूं: / (जिस ऐप पर मैं काम कर रहा हूं वह जेबी डिवाइस के लिए है और ऐपस्टोर पर नहीं जा रहा है )
iDev

1
बैक बटन को छोड़कर अच्छा लगता है, जो नीचे से जोड़ा जाता है।
gklka

2

Apple के पास इसके लिए विशेष रूप से नमूना ऐप है। यह नेविगेशन बार के लिए पारदर्शी छाया छवि और रंगीन पृष्ठभूमि छवि सेट करने और नेविगेशन बार के नीचे एक दृश्य को कॉन्फ़िगर करने के तरीके का वर्णन करता है। इसमें अन्य नेविगेशन बार अनुकूलन के उदाहरण भी हैं।

Https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html देखें


2

मैंने @ साइमन की विधि का उपयोग करके हेयरलाइन को हटाने की कोशिश की लेकिन यह काम नहीं किया। मैं शायद कुछ गलत कर रहा हूं क्योंकि मैं सुपर नोब हूं। हालांकि, लाइन को हटाने के बजाय, आप केवल hiddenविशेषता का उपयोग करके इसे छिपा सकते हैं । यहाँ कोड है:

var hairLine: UIView = UIView()
override func viewDidLoad() {
    super.viewDidLoad()
    doneButton.enabled = false

    for parent in self.navigationController!.navigationBar.subviews {
        for childView in parent.subviews {
            if childView is UIImageView && childView.bounds.size.width == self.navigationController!.navigationBar.frame.size.width {
                hairLine = childView
            }
        }
    }
}

override func viewWillAppear(animated: Bool) {
    hairLine.hidden = true
}

override func viewWillDisappear(animated: Bool) {
    hairLine.hidden = false
}

आशा है कि यह किसी की मदद करता है!


2

स्विफ्ट 3/4 में UINavigationbar के नीचे UISegmentedControl

विवरण

एक्सकोड 9.2, स्विफ्ट 4

पूरा नमूना

ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var navigationBarWithSegmentedControl: UINavigationBar!

    fileprivate let barBackgroundColor = UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0)

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationBarWithSegmentedControl.barTintColor = barBackgroundColor
        tableView.dataSource = self
        tableView.delegate = self
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.barTintColor = barBackgroundColor
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
        navigationController?.navigationBar.shadowImage =  nil
    }
}

extension ViewController: UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 100
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as! TableViewCell
        cell.label.text = "\(indexPath)"
        return cell
    }
}

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) {
            cell.isSelected = false
        }
    }
}

TableViewCell.swift

import UIKit

class TableViewCell: UITableViewCell {

    @IBOutlet weak var label: UILabel!

}

Main.storyboard

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="5TT-dT-dEr">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Text-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="stackoverflow_21887252" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="HLl-W2-Moq">
                                <rect key="frame" x="0.0" y="44" width="375" height="559"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="TableViewCell" id="FKA-c2-G0Q" customClass="TableViewCell" customModule="stackoverflow_21887252" customModuleProvider="target">
                                        <rect key="frame" x="0.0" y="28" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="FKA-c2-G0Q" id="Xga-fr-00H">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QW3-Hg-hU9">
                                                    <rect key="frame" x="15" y="11" width="345" height="21"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <constraints>
                                                <constraint firstAttribute="trailingMargin" secondItem="QW3-Hg-hU9" secondAttribute="trailing" id="Grx-nu-2Tu"/>
                                                <constraint firstItem="QW3-Hg-hU9" firstAttribute="centerY" secondItem="Xga-fr-00H" secondAttribute="centerY" id="MIn-R2-wYE"/>
                                                <constraint firstItem="QW3-Hg-hU9" firstAttribute="leading" secondItem="Xga-fr-00H" secondAttribute="leadingMargin" id="h6T-gt-4xk"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.050000000000000003" colorSpace="custom" customColorSpace="sRGB"/>
                                        <connections>
                                            <outlet property="label" destination="QW3-Hg-hU9" id="QjK-i2-Ckd"/>
                                            <segue destination="hcx-2g-4ts" kind="show" id="IGa-oI-gtf"/>
                                        </connections>
                                    </tableViewCell>
                                </prototypes>
                            </tableView>
                            <navigationBar contentMode="scaleToFill" translucent="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8jj-w6-ZtU">
                                <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                                <items>
                                    <navigationItem id="q8e-Yy-ceD">
                                        <nil key="title"/>
                                        <segmentedControl key="titleView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="cHD-bv-2w7">
                                            <rect key="frame" x="96.5" y="7" width="182" height="30"/>
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                            <segments>
                                                <segment title="First"/>
                                                <segment title="Second"/>
                                                <segment title="Third"/>
                                            </segments>
                                        </segmentedControl>
                                    </navigationItem>
                                </items>
                            </navigationBar>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="8jj-w6-ZtU" firstAttribute="trailing" secondItem="HLl-W2-Moq" secondAttribute="trailing" id="1vT-ta-AuP"/>
                            <constraint firstItem="8jj-w6-ZtU" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="BJE-BC-XcB"/>
                            <constraint firstItem="8jj-w6-ZtU" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="Boi-dN-awt"/>
                            <constraint firstItem="HLl-W2-Moq" firstAttribute="bottom" secondItem="wfy-db-euE" secondAttribute="top" id="W1n-m1-EOH"/>
                            <constraint firstAttribute="trailing" secondItem="8jj-w6-ZtU" secondAttribute="trailing" id="ihc-9p-71l"/>
                            <constraint firstItem="HLl-W2-Moq" firstAttribute="top" secondItem="8jj-w6-ZtU" secondAttribute="bottom" id="pFk-pU-y7j"/>
                            <constraint firstItem="8jj-w6-ZtU" firstAttribute="leading" secondItem="HLl-W2-Moq" secondAttribute="leading" id="yjf-7o-t2m"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" title="Text" id="yrt-M7-PAX">
                        <barButtonItem key="leftBarButtonItem" systemItem="search" id="wrz-DS-FdJ"/>
                        <barButtonItem key="rightBarButtonItem" systemItem="add" id="LnB-Ci-YnO"/>
                    </navigationItem>
                    <connections>
                        <outlet property="navigationBarWithSegmentedControl" destination="8jj-w6-ZtU" id="Ggl-xb-fmj"/>
                        <outlet property="tableView" destination="HLl-W2-Moq" id="hEO-2U-I9k"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="894" y="791"/>
        </scene>
        <!--View Controller-->
        <scene sceneID="Bi7-4l-uRN">
            <objects>
                <viewController id="hcx-2g-4ts" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="NSV-kw-fuz"/>
                        <viewControllerLayoutGuide type="bottom" id="aze-le-h11"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="1nd-qq-kDT">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="k7W-CB-tpA">
                                <rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                            </view>
                        </subviews>
                        <color key="backgroundColor" white="0.66666666666666663" alpha="0.5" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstAttribute="trailing" secondItem="k7W-CB-tpA" secondAttribute="trailing" id="1t2-Bi-dR7"/>
                            <constraint firstItem="k7W-CB-tpA" firstAttribute="bottom" secondItem="aze-le-h11" secondAttribute="top" id="Fnm-UL-geX"/>
                            <constraint firstItem="k7W-CB-tpA" firstAttribute="leading" secondItem="1nd-qq-kDT" secondAttribute="leading" id="bKV-7A-hz0"/>
                            <constraint firstItem="k7W-CB-tpA" firstAttribute="top" secondItem="NSV-kw-fuz" secondAttribute="bottom" id="cFH-7i-vAm"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="jPK-Z9-yvJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1566" y="791"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="1Pc-qt-rnW">
            <objects>
                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="5TT-dT-dEr" sceneMemberID="viewController">
                    <toolbarItems/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="lPt-hx-iar">
                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="6b8-br-zSy"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="u7U-GH-NHe" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="140" y="791.15442278860576"/>
        </scene>
    </scenes>
</document>

परिणाम

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें


महान और समय पर लिखना। धन्यवाद वसीली
daspianist

किसी भी तरह से आप इसके लिए XCode प्रोजेक्ट अपलोड कर सकते हैं? मुझे लगता है कि मैं अपने नेविगेशन बार को सही तरीके से कॉन्फ़िगर नहीं कर रहा हूं। उदाहरण के लिए, मैं देख रहा हूं कि यह मानक ग्रे के बजाय एक सफेद पृष्ठभूमि का शीर्षक है। धन्यवाद
डासियनवादी १२'१

यह कोड - मेरे प्रोजेक्ट की पूरी कॉपी है। सभी फ़ाइलों की प्रतिलिपि बनाएँ। या मुझे अपनी त्रुटि के बारे में बताएं।
वसीली बोडनार्चुक

बहुत खुबस! धन्यवाद!

क्या आप इसके द्वारा प्रदान किए गए एक के अलावा दूसरी नेविगेशन बार (जो खंडित नियंत्रण वाले) का उपयोग कर रहे हैं UINavigationController?
एलएसएच

0

आपके द्वारा पूछे गए कार्य करने के कई तरीके हैं। बेशक सबसे आसान एक इंटरफ़ेस बिल्डर में इसे बनाने के लिए लेकिन मुझे लगता है कि यह आपके दिमाग में नहीं था। मैंने आपके द्वारा ऊपर पोस्ट की गई छवि का एक उदाहरण बनाया। यह बिल्कुल वैसा ही नहीं है, लेकिन आप जिस चीज की तलाश में हैं, उसे पाने के लिए कई गुणों के साथ खेल सकते हैं।

ViewController.h में

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate>

@end

ViewController.m में

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) UISegmentedControl *mySegmentControl;
@property (strong, nonatomic) UISearchBar *mySearchBar;
@property (strong, nonatomic) UITableView *myTableView;
@property (strong, nonatomic) NSMutableArray *tableDataArray;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // create a custom UIView
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 64, 320, 84)];
    myView.tintColor = [UIColor lightGrayColor]; // change tiny color or delete this line to default

    // create a UISegmentControl
    self.mySegmentControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All", @"Not on this iPhone", nil]];
    self.mySegmentControl.selectedSegmentIndex = 0;
    [self.mySegmentControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
    self.mySegmentControl.frame = CGRectMake(20, 10, 280, 30);
    [myView addSubview:self.mySegmentControl]; // add segment control to custom view

    // create UISearchBar
    self.mySearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 40, 320, 44)];
    [self.mySearchBar setDelegate:self];
    self.mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
    [myView addSubview:self.mySearchBar]; // add search bar to custom view

    [self.view addSubview:myView]; // add custom view to main view

    // create table data array
    self.tableDataArray = [[NSMutableArray alloc] initWithObjects:
                           @"Line 1",
                           @"Line 2",
                           @"Line 3",
                           @"Line 4",
                           @"Line 5",
                           @"Line 6",
                           @"Line 7",
                           @"Line 8",
                           @"Line 9",
                           @"Line 10",
                           @"Line 11",
                           @"Line 12", nil];
    self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 160, 320, 320)];
    [self.myTableView setDataSource:self];
    [self.myTableView setDelegate:self];
    [self.view addSubview:self.myTableView]; // add table to main view
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];
    NSLog(@"search text = %@",searchBar.text);
    // code for searching...
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.tableDataArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }

    cell.textLabel.text = [self.tableDataArray objectAtIndex:indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Selected table item: %@",[self.tableDataArray objectAtIndex:indexPath.row]);

    // do something once user has selected a table cell...
}

-(void)segmentAction:(id)sender {
    NSLog(@"Segment control changed to: %@",[self.mySegmentControl titleForSegmentAtIndex:[self.mySegmentControl selectedSegmentIndex]]);

    // do something based on segment control selection...
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

-2

displaySearchBarInNavigationBar नेविगेशन बार में खोज बार के साथ-साथ इसके स्कोप बार को प्रदर्शित करने का तरीका है।

जब भी आप कस्टम शीर्षक दिखाते हैं, तो आपको बस खोज बार को छिपाने की आवश्यकता होती है


मुझे नहीं मिला। क्या आप कुछ स्रोत कोड प्रदान कर सकते हैं?
योएरिबोवन

ऐसा कहा जाता है कि "नेविगेशन बार में प्रदर्शित खोज बार में स्कोप बार नहीं हो सकता है।"
वोकिलम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.