ট্যাব বার আইটেমের পাঠ্য সরান, কেবল চিত্র দেখান


90

সহজ প্রশ্ন, আমি কীভাবে ট্যাব বার আইটেমের পাঠ্য সরাতে পারি এবং কেবল চিত্রটিই প্রদর্শন করতে পারি?

আমি ইনস্ট্রগ্রাম অ্যাপে বার আইটেমগুলি পছন্দ করতে চাই:

এখানে চিত্র বর্ণনা লিখুন

এক্সকোড in-তে পরিদর্শকের মধ্যে আমি শিরোনামটি সরিয়ে একটি @ 2x (50px) এবং একটি @ 3x (75px) চিত্র চয়ন করি। তবে চিত্রটি মুছে ফেলা পাঠ্যের মুক্ত স্থান ব্যবহার করে না। ইনস্টাগ্রাম অ্যাপের মতো একই ট্যাব বার আইটেম চিত্রটি কীভাবে অর্জন করবেন কোনও ধারণা?



4
""শিরোনামের জন্য ব্যবহার করছেন, সম্ভবত?
হোলএক্স

4
অফসেট সেট করা কেবল একটি কৌশল, সঠিক উত্তরটি একটু নীচে। আপনার নেভিগেশনআইটেম.টাইটেল = "কিছু শিরোনাম" ব্যবহার করা উচিত
ডেভিট সিরাদেঘিয়ান

উত্তর:


129

আপনার imageInsetsসম্পত্তি সঙ্গে খেলা উচিত UITabBarItem। এখানে নমুনা কোড রয়েছে:

let tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "more")
tabBarItem.imageInsets = UIEdgeInsets(top: 9, left: 0, bottom: -9, right: 0)

ভিতরে থাকা মানগুলি UIEdgeInsetsআপনার চিত্রের আকারের উপর নির্ভর করে। আমার অ্যাপ্লিকেশনটিতে কোডটির ফলাফল এখানে রয়েছে:

এখানে চিত্র বর্ণনা লিখুন


25
আপনি ইন্সপেক্টরের মধ্যে ইমেজ ইনসেটগুলিও সামঞ্জস্য করতে পারেন।
শে

ম্যাজিক নম্বরগুলি একটি খারাপ ধারণা। একই জিনিসটি সম্পাদনের জন্য সর্বজনীনভাবে সামঞ্জস্যপূর্ণ উপায়ের জন্য দয়া করে আমার উত্তরটি দেখুন।
এজেকিয়েল ভিক্টর

4
এটি আর iOS 11 এ আর কাজ করে না - আপনি যদি সক্রিয় ট্যাবে ডাবল ক্লিক করেন তবে এটি কোনও কারণে ইনসেটগুলি দ্বিগুণ করবে।
বেন গোটো

@ বেনগোটো একই সমস্যার সমাধান পেয়েছেন?
দীক্ষিত আকাবাড়ি

@ দীক্ষিতআকাবাড়ির অন্যান্য লোকেরা আইওএস 11 এর জন্য ইতিমধ্যে কিছু ভাল সমাধান পোস্ট করেছেন
প্রণব কাসেটি

78
// Remove the titles and adjust the inset to account for missing title
for(UITabBarItem * tabBarItem in self.tabBar.items){
    tabBarItem.title = @"";
    tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
}

4
শিরোনাম অপসারণের পরিবর্তে পরিষ্কার করার জন্য পাঠ্যের রঙ পরিবর্তন করুন। শিরোনাম দরকারী হতে পারে।
এডুয়ার্ডো মাউরো

4
এডোয়ার্ডোতে কোডস! আমাকে উপলব্ধি করতে একটি ভাল বিকল্পটি আইটেমের শিরোনামটিতে উল্লম্ব UIOffset সেট করা পজিশন অ্যাজাস্টমেন্ট
জুলিয়াস

4
আপনি আপনার কাস্টম ট্যাববার নিয়ামকটি এটি কোথায় রাখবেন?
ইউকেডাটাগীক

69

আপনি স্টোরিবোর্ডে এটি কীভাবে করেন তা এখানে।

শিরোনাম পাঠ্য সাফ করুন এবং নীচের স্ক্রিনশটের মতো চিত্রটি ইনসেটটি সেট করুন

এখানে চিত্র বর্ণনা লিখুন

মনে রাখবেন আইকন আকারটি আপেল ডিজাইনের গাইডলাইনটি অনুসরণ করবে

এখানে চিত্র বর্ণনা লিখুন

এর অর্থ আপনার @ 1x এর জন্য 25px x 25px, @ 2x এর জন্য 50px x 50px, @ 3x এর জন্য 75px x 75px থাকা উচিত


45

প্রতিটি সেটিং পদ্ধতির ব্যবহার UITabBarItemগুলি titleকরার সম্পত্তি "" এবং আপডেট imageInsetsঠিকমত কাজ করবে না যদি দৃশ্য নিয়ামক মধ্যে self.titleসেট করা হয়। উদাহরণস্বরূপ, যদি self.viewControllersইউআইটিববারকন্ট্রোলারটি এম্বেড থাকে UINavigationControllerএবং নেভিগেশন বারে আপনাকে শিরোনামের প্রয়োজন হয়। এই ক্ষেত্রে UINavigationItems ব্যবহার করে সরাসরি শিরোনাম ব্যবহার করুন self.navigationItem.title, না self.title


4
এটি একটি উপায় ক্লিনার পদ্ধতি বলে মনে হচ্ছে। +1 @ ওলেগ এটি উত্তর হিসাবে চিহ্নিত করা উচিত।
আকসেলি

29

সুইচ সংস্করণ ডিডিগো উত্তর

আইওএস 11 এর সাথে সামঞ্জস্যপূর্ণ

ভিউকন্ট্রোলারের শিরোনাম স্থাপনের পরে ভিউকন্ট্রোলারগুলির প্রতিটি প্রথম সন্তানের ভিউডিডোডে এই ফাংশনটি কল করুন

ভাল অভ্যাস:

বিকল্প হিসাবে @ দাস্পিয়ান হিসাবে মন্তব্যগুলিতে পরামর্শ দেওয়া হয়েছে

এই শ্রেণীর বেস টববারকন্ট্রোলারের মতো একটি সাবক্লাস তৈরি করুন: ইউআইটিববারকন্ট্রোলার, ইউআইটিববারকন্ট্রোলারডেলিগেট এবং এই ফাংশনটি সাবক্লাসের ভিউডিলডোডে রাখুন

func removeTabbarItemsText() {

    var offset: CGFloat = 6.0

    if #available(iOS 11.0, *), traitCollection.horizontalSizeClass == .regular {
        offset = 0.0
    }

    if let items = tabBar.items {
        for item in items {
            item.title = ""
            item.imageInsets = UIEdgeInsets(top: offset, left: 0, bottom: -offset, right: 0)
        }
    }
}

4
দুর্দান্ত ফাংশন! আপনি বিকল্পভাবে এর মতো একটি সাবক্লাস তৈরি করতে class BaseTabBarController: UITabBarController, UITabBarControllerDelegateএবং এই ফাংশনটি সাবক্লাসেরviewDidLoad
ডাস্পিয়ানবাদক

26

আপনি যদি স্টোরিবোর্ডগুলি ব্যবহার করেন তবে এটি আপনার সেরা বিকল্প হবে। এটি সমস্ত ট্যাব বার আইটেমের মধ্য দিয়ে লুপ করে এবং প্রত্যেকটির জন্য এটি শিরোনামটি কিছুই নির্ধারণ করে না এবং চিত্রটিকে পূর্ণ স্ক্রিন করে। (আপনি অবশ্যই স্টোরিবোর্ডে একটি চিত্র যুক্ত করেছেন)

for tabBarItem in tabBar.items!
{
   tabBarItem.title = ""
   tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0)
}

মনে রাখা ভাল যে আপনি উপরের এবং নীচের উভয় ইনসেটগুলি সেট না করলে চিত্রটি pedদ্ধ হবে।
জুলিয়াস

16

আইওএস 11 এই সমাধানগুলিতে অনেকগুলি একটি কঙ্ককে ছুঁড়ে ফেলেছে, তাই আমি ইউআইটিববার সাবক্লাসিং করে এবং লেআউটসুভিউগুলিকে ওভাররাইড করে আইওএস 11 এ আমার সমস্যাগুলি ঠিক করেছি।

class MainTabBar: UITabBar {

    override func layoutSubviews() {
        super.layoutSubviews()

        // iOS 11: puts the titles to the right of image for horizontal size class regular. Only want offset when compact.
        // iOS 9 & 10: always puts titles under the image. Always want offset.
        var verticalOffset: CGFloat = 6.0

        if #available(iOS 11.0, *), traitCollection.horizontalSizeClass == .regular {
            verticalOffset = 0.0
        }

        let imageInset = UIEdgeInsets(
            top: verticalOffset,
            left: 0.0,
            bottom: -verticalOffset,
            right: 0.0
        )

        for tabBarItem in items ?? [] {
            tabBarItem.title = ""
            tabBarItem.imageInsets = imageInset
        }
    }
}

এটিই আমার পক্ষে কাজ করেছিল তবে আমার মাইটাববারকন্ট্রোলারের সাবক্লাসের 'ওভাররাইড ফানক ভিউডিডলাউটসুভিউ'গুলিকে কোডটি ভিতরে রাখতে হয়েছিল। আমি ট্যাববারকন্ট্রোলারটি সাবক্লাস করেছি এবং এর নাম দিয়েছি
ল্যান্স সামেরিয়া

সমাধান আমার পক্ষে কাজ করেছে, খুব সুন্দরভাবে ly আমি এটি এক্সটেনশন হিসাবে ব্যবহার করেছি যাতে এটি যুক্ত করা সহজ
মিশাল গামনি

@ ল্যান্স সামারিয়া এটি আমাকে ট্যাব বার নিয়ামক কোডটি স্পর্শ করার প্রয়োজন ছাড়াই কাজ করেছিল
প্রণব কাসেটি

12

আমি আমার বেসট্যাববারকন্ট্রোলারের ভিডিডিলোডে নিম্নলিখিত কোডগুলি ব্যবহার করেছি। মনে রাখবেন যে আমার উদাহরণে আমার কাছে 5 টি ট্যাব রয়েছে এবং নির্বাচিত চিত্রটি সর্বদা বেস_মেজ + "_নির্বাচিত" থাকবে।

// Get tab bar and set base styles
let tabBar = self.tabBar;
tabBar.backgroundColor = UIColor.whiteColor()

// Without this, images can extend off top of tab bar
tabBar.clipsToBounds = true

// For each tab item..
let tabBarItems = tabBar.items?.count ?? 0
for i in 0 ..< tabBarItems {
    let tabBarItem = tabBar.items?[i] as UITabBarItem

    // Adjust tab images (Like mstysf says, these values will vary)
    tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -6, 0);

    // Let's find and set the icon's default and selected states
    // (use your own image names here)
    var imageName = ""
    switch (i) {
    case 0: imageName = "tab_item_feature_1"
    case 1: imageName = "tab_item_feature_2"
    case 2: imageName = "tab_item_feature_3"
    case 3: imageName = "tab_item_feature_4"
    case 4: imageName = "tab_item_feature_5"
    default: break
    }
    tabBarItem.image = UIImage(named:imageName)!.imageWithRenderingMode(.AlwaysOriginal)
    tabBarItem.selectedImage = UIImage(named:imageName + "_selected")!.imageWithRenderingMode(.AlwaysOriginal)
}

4
ব্যবহারের পরিবর্তে for var i = 0; i < tabBar... , আপনি সবেমাত্র বলতে পারতেন; for tabBarItems in tabBar.items!
জেসি ওনোলেন

10

সুইফট 4 পদ্ধতির

আমি একটি ফাংশন যা একটি ট্যাববার্টিম লাগে এবং এটিতে কিছু ফর্ম্যাটিং করে তা প্রয়োগ করে কৌতুকটি করতে পেরেছিলাম।

চিত্রটিকে আরও কেন্দ্রিক করে তুলতে কিছুটা নিচে নিয়ে যায় এবং ট্যাব বারের পাঠ্যও আড়াল করে। খালি স্ট্রিংয়ের জন্য এটির শিরোনাম সেট করার চেয়ে আরও ভাল কাজ করেছেন, কারণ আপনার যখন একটি নেভিগেশনবার থাকে তখন ট্যাববারটি নির্বাচিত হওয়ার পরে ভিউকন্ট্রোলারের শিরোনামটি পুনরায় অর্জন করে

func formatTabBarItem(tabBarItem: UITabBarItem){
    tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
    tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor:UIColor.clear], for: .selected)
    tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor:UIColor.clear], for: .normal)
}

সর্বশেষ বাক্য গঠন

extension UITabBarItem {
    func setImageOnly(){
        imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
        setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.clear], for: .selected)
        setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.clear], for: .normal)
    }
 }

এবং এটি কেবল আপনার ট্যাববারে এটি ব্যবহার করুন:

tabBarItem.setImageOnly()

6

শীর্ষ উত্তর ছাড়া এটি করার জন্য এখানে আরও ভাল, আরও নির্বোধ উপায় way

[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]}
                                         forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]}
                                         forState:UIControlStateHighlighted];

AppDelegate.didFinishLaunchingWithOptionsএটি আপনার এতে রাখুন যাতে এটি আপনার অ্যাপ্লিকেশন জুড়ে সমস্ত ট্যাব বার বোতামকে প্রভাবিত করে।


4
এটি কেবল শিরোনামটি লুকিয়ে রাখে এবং চিত্রের অবস্থান সামঞ্জস্য করে না।
মোস্তফা

4
হ্যাঁ তবে প্রশ্নটি চিত্রটি সামঞ্জস্য করার বিষয়ে কিছুই বলেনি। শুধু লেখাটি লুকিয়ে রেখেছি। এবং ভিউ কন্ট্রোলার থেকে শিরোনাম সরিয়ে ফেলার ক্ষতিকার্যে পাঠ্যটি ভালভাবে আড়াল করা ভুল বলে মনে হচ্ছে। বিশেষত যখন আপনি এটিকে আপনার নেভিগেশনভিউ নিয়ন্ত্রণকারী হিসাবে অংশ হিসাবে এটি শিরোনামটি ব্যবহার করতে পারেন
ডান 1one

6

একটি সংক্ষিপ্ত, নিরাপদ UITabBarController এক্সটেনশন সুইফট (উপর ভিত্তি করে @ korgx9 উত্তর):

extension UITabBarController {
  func removeTabbarItemsText() {
    tabBar.items?.forEach {
      $0.title = ""
      $0.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
    }
  }
}

2

সুইড ৪.২-ডিডিয়েগোর উত্তরের ভিত্তিতে :

extension UITabBarController {
    func cleanTitles() {
        guard let items = self.tabBar.items else {
            return
        }
        for item in items {
            item.title = ""
            item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
        }
    }
}

এবং আপনাকে কেবল self.tabBarController?.cleanTitles()আপনার ভিউ কন্ট্রোলারে কল করতে হবে ।


1

এই পৃষ্ঠায় সমস্ত দুর্দান্ত উত্তরের উপর ভিত্তি করে, আমি আরও একটি সমাধান তৈরি করেছি যা আপনাকে আবার শিরোনাম প্রদর্শন করতে দেয়। শিরোনামের বিষয়বস্তু অপসারণ করার পরিবর্তে, আমি কেবল হরফের রঙটি স্বচ্ছতে পরিবর্তন করি।

extension UITabBarItem {

    func setTitleColorFor(normalState: UIColor, selectedState: UIColor) {
        self.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: normalState], for: .normal)
        self.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: selectedState], for: .selected)
    }

}


extension UITabBarController {

    func hideItemsTitle() {

        guard let items = self.tabBar.items else {
            return
        }

        for item in items {
            item.setTitleColorFor(normalState: UIColor(white: 0, alpha: 0), selectedState: UIColor(white: 0, alpha: 0))
            item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
        }

    }

    func showItemsTitle() {

        guard let items = self.tabBar.items else {
            return
        }

        for item in items {
            item.setTitleColorFor(normalState: .black, selectedState: .yellow)
            item.imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        }

    }

}


0

সবচেয়ে সহজ উপায় এবং সর্বদা কাজ করে:

class TabBar: UITabBar {

    override func layoutSubviews() {
        super.layoutSubviews()

        subviews.forEach { subview in
            if subview is UIControl {
                subview.subviews.forEach {
                    if $0 is UILabel {
                        $0.isHidden = true
                        subview.frame.origin.y = $0.frame.height / 2.0
                    }
                }
            }
        }
    }
}

0

আমার ক্ষেত্রে, একই ভিউকন্ট্রোলারটি ট্যাববার এবং অন্যান্য নেভিগেশন প্রবাহে ব্যবহৃত হয়েছিল। আমার ভিউকন্ট্রোলারের অভ্যন্তরে, আমি সেট করে রেখেছি self.title = "Some Title"যা ট্যাববারে শিরোনাম নির্ধারণ nilবা ফাঁকা নির্ধারণ না করেই ট্যাববারে প্রদর্শিত হচ্ছে । আমি imageInsetsঅনুসরণ হিসাবে সেট করেছি :

item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)

সুতরাং আমার ভিউকন্ট্রোলারের ভিতরে আমি নেভিগেশন শিরোনামটি নিম্নরূপে পরিচালনা করেছি:

if isFromTabBar {
   // Title for NavigationBar when ViewController is added in TabBar
   // NOTE: Do not set self.title = "Some Title" here as it will set title of tabBarItem
   self.navigationItem.title = "Some Title"
} else {
   // Title for NavigationBar when ViewController is opened from navigation flow
   self.title = "Some Title"
}

0

ইউআইটিববারকন্ট্রোলারের একটি সাবক্লাস তৈরি করুন এবং এটি আপনার ট্যাববারে অর্পণ করুন, তারপরে ভিডডিডলড পদ্ধতিতে কোডটির এই লাইনটি রাখুন:

tabBar.items?.forEach({ (item) in
        item.imageInsets = UIEdgeInsets.init(top: 8, left: 0, bottom: -8, right: 0)
    })

0

কাস্টম ট্যাববার - আইওএস 13, সুইফ্ট 5, এক্সকোড 11

  • পাঠ্য ছাড়াই ট্যাববার আইটেম
  • ট্যাববার আইটেমগুলি উল্লম্বভাবে কেন্দ্র করে
  • বৃত্তাকার ট্যাববার দর্শন
  • ট্যাববার গতিশীল অবস্থান এবং ফ্রেম

স্টোরিবোর্ড ভিত্তিক। এটি প্রোগ্রামিমেও খুব সহজেই অর্জন করা যায়। অনুসরণ করতে কেবল 4 টি পদক্ষেপ:

  1. ট্যাব বার আইকনগুলি অবশ্যই 3 টি আকারের, কালো রঙের হতে হবে। সাধারণত, আমি fa2png.io - আকারগুলি থেকে ডাউনলোড করি: 25x25, 50x50, 75x75। পিডিএফ ইমেজ ফাইল কাজ করে না!

    এখানে চিত্র বর্ণনা লিখুন

  2. ট্যাব বার আইটেমটির স্টোরিবোর্ডে আপনি বৈশিষ্ট্য পরিদর্শকের মাধ্যমে আইকনটি ব্যবহার করতে চান তা সেট করে। (স্ক্রিনশট দেখুন)

এখানে চিত্র বর্ণনা লিখুন

  1. কাস্টম ট্যাববারকন্ট্রোলার -> নতুন ফাইল -> প্রকার: UITabBarController -> স্টোরিবোর্ডে সেট করুন। (স্ক্রিনশট দেখুন)

এখানে চিত্র বর্ণনা লিখুন

  1. ইউআইটিববারকন্ট্রোলার ক্লাস

    ক্লাস রাউন্ডডট্যাববারভিউ কনট্রোলার: ইউআইটিববারকন্ট্রোলার {

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Do any additional setup after loading the view.
        // Custom tab bar view
        customizeTabBarView()
    }
    
    private func customizeTabBarView() {
        let tabBarHeight = tabBar.frame.size.height
        self.tabBar.layer.masksToBounds = true
        self.tabBar.isTranslucent = true
        self.tabBar.barStyle = .default
        self.tabBar.layer.cornerRadius = tabBarHeight/2
        self.tabBar.layer.maskedCorners = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner]
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let viewWidth = self.view.bounds.width
        let leadingTrailingSpace = viewWidth * 0.05
    
        tabBar.frame = CGRect(x: leadingTrailingSpace, y: 200, width: viewWidth - (2 * leadingTrailingSpace), height: 49)
    }
    

    }

  2. ফলাফল এখানে চিত্র বর্ণনা লিখুন


0

আপনি যদি যাদু সংখ্যা ব্যবহার না করে ট্যাবগুলি কেন্দ্র করে / চিত্রের পোকামাকড় পরিবর্তন করতে চান তবে নীচেরগুলি আমার পক্ষে কাজ করেছে (সুইফট 5.2.2 এ):

একটি ইউআইটিববারকন্ট্রোলার সাবক্লাসে, আপনি ভিউ কন্ট্রোলারগুলি সেট করার পরে চিত্রের ইনসেটগুলি যুক্ত করতে পারেন।

override var viewControllers: [UIViewController]? {
    didSet {
      addImageInsets()
    }
}

func addImageInsets() {
    let tabBarHeight = tabBar.frame.height

    for item in tabBar.items ?? [] where item.image != nil {
      let imageHeight = item.image?.size.height ?? 0
      let inset = CGFloat(Int((tabBarHeight - imageHeight) / 4))
      item.imageInsets = UIEdgeInsets(top: inset,
                                      left: 0,
                                      bottom: -inset,
                                      right: 0)
    }
}

পাঠ্যটি লুকিয়ে রাখার জন্য উপরের বিকল্পগুলির বেশ কয়েকটিতে সমাধানের সমাধান রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.