ios - আইওএস 11 নেভিগেশন আইটেম.টিটলভিউ প্রস্থ সেট করা নেই




uinavigationcontroller uinavigationbar (9)

বিদ্যমান উত্তরের সাথে যোগ করুন:

যদি আপনার কাস্টম শিরোনাম দর্শনটি এমন একটি ভিউ হয় যা ইতিমধ্যে ডিফল্টরূপে ( .zero ব্যতীত) অভ্যন্তরীণ সামগ্রীর আকার রয়েছে , উদাহরণস্বরূপ একটি UILabel , একটি UITextView বা UIButton , আপনি কেবল সেট করতে পারেন

yourCustomTitleView.translatesAutoresizingMaskIntoConstraints = false

এবং এটি স্বয়ংক্রিয়ভাবে কেবলমাত্র এর বিষয়বস্তুগুলি আবদ্ধ করার জন্য সামঞ্জস্য করবে, তবে বাম এবং ডান আইটেম দর্শনের সাথে কখনই ওভারল্যাপ হবে না।

উদাহরণস্বরূপ, আপনি ইন্টারফেস বিল্ডারে একটি নেভিগেশন বারের শিরোনাম দৃশ্য অঞ্চলে একটি বোতামটি টেনে আনতে পারেন, titleButton জন্য আপনার ভিউ কন্ট্রোলারে একটি আউটলেট titleButton তৈরি করতে পারেন এবং তারপরে এটি করতে পারেন

override func viewDidLoad() {
    super.viewDidLoad()
    titleButton.translatesAutoresizingMaskIntoConstraints = false
}

আইভিএস 11 এ একটি নেভিগেশন আইটেম.টিটলভিউয়ের সাথে এমন আচরণ দেখানো হচ্ছে যেখানে শিরোনামভিউয়ের প্রস্থ স্ক্রিনের পুরো প্রস্থ নয়।

আমার একটি কাস্টম ভিউ আছে যা আমি শিরোনামভিউ হিসাবে সেট করেছি। IOS11 এর আগে ভিউটি নেভিগেশন বারের অঞ্চলটি পূরণ করবে। তবে আইওএস 11 এটি স্ক্রিনের প্রস্থটি পূরণ করতে পুনরায় আকার দিচ্ছে না।

আমি শিরোনামভিউ সেট করার আগে ভিউটির ফ্রেমটি সেট করার চেষ্টা করেছি তবে কোনও ভাগ্য নেই। আমি শিরোনামভিউস সুপারভিউকে লেআউট সীমাবদ্ধতায় বাধ্য করার চেষ্টা করেছি তবে ভাগ্য নেই।

স্ক্রিনশট সংযুক্ত:

iOS10:

iOS11:

অন্য কেউ এই অভিজ্ঞতা?


@ ফ্যালকনের উত্তরটি এখানে কোড ব্যবহার করে:

শিরোনাম ভিউ হিসাবে ব্যবহৃত হয় এমন ভিউতে এই কোডটি যুক্ত করুন

override var intrinsicContentSize: CGSize {
    return UILayoutFittingExpandedSize
} 

আপনি যদি intrinsicContentSize ওভাররাইড করতে না চান তবে আপনি প্রতিবন্ধকতাগুলিও ব্যবহার করতে পারেন। এখানে স্ন্যাপকিটের একটি ডেমো রয়েছে

self.navigationItem.titleView = titleView
if #available(iOS 11, *) {
    titleView.snp.makeConstraints({ (make) in
        make.width.equalTo(250) // fixed width
        make.height.equalTo(30) // less than 44(height of naviagtion bar)
    })
}else {
    titleView.frame = ...
}

তবে যদি কোনও দিকে (বাম বা ডান) নেভিগেশনবারে একাধিক নেভিগেশনবারাইটস থাকে তবে আপনার অবশ্যই আন্তঃসংশ্লিষ্ট ব্যবহার করা উচিত;


আমাকে নেভিগেশন আইটেম.টাইটেলভিউ হিসাবে একটি ইউআইআইমেজভিউতে ফিট করতে হয়েছিল। দিক অনুপাতটি মাপসই করে তবে অন্তর্নিহিত কনসেন্টসাইজ এটিকে বড় করে তোলে। চিত্রটি স্কেলিংয়ের ফলে চিত্রের গুণমান খারাপ হয়েছিল। লেআউট অ্যাঙ্করগুলি সেট করা আমার পক্ষে কাজ করেছিল:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 30)];
[imageView setImage:image];
[imageView.widthAnchor constraintEqualToConstant:80].active = YES;
[imageView.heightAnchor constraintEqualToConstant:30].active = YES;
[imageView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imageView;

আমি এটি সন্ধান। আমাকে ভিউ এবং পাঠ্য ক্ষেত্রের জন্য অন্তর্নিহিত কন্টেন্টসাইজ গেটর ওভাররাইড করতে হয়েছিল।

আমি প্রস্থটিকে সিজিএফ্লোএট.ট্রেইস্টফাইন্যালম্যাগনিটিউডে সেট করেছি যাতে এটি সর্বদা পর্দার মতো প্রশস্ত থাকে।

হালনাগাদ:

যেহেতু আমি এই ইস্যুতে কয়েক ঘন্টা ব্যয় করেছি, আশা করি অন্য কিছু কিছু একসাথে জড়িত রেখে আরও দ্রুত ধরা হবে

আমি কাস্টম TitleView নামে CustomTitleView একটি কাস্টম সাব ক্লাস তৈরি করেছি, এখানে কোডটি রয়েছে:

import UIKit

class CustomTitleView: UIView {

  override var intrinsicContentSize: CGSize {
    return UIView.layoutFittingExpandedSize
  }
}

এবং সবচেয়ে গুরুত্বপূর্ণ অংশটি যা আমি প্রথম থেকেই মিস করেছি তা হ'ল:


ইউআইভিউর একটি সাবক্লাস তৈরি করে এটি স্থির করে এবং এটি ইউআইএনএভিগেশন কন্ট্রোলারের একটি শিরোনাম দর্শনে নির্ধারিত

উদ্দেশ্য গ:

#import "FLWCustomTitleView.h"

@implementation FLWCustomTitleView

- (CGSize )intrinsicContentSize {
  return UILayoutFittingExpandedSize;
}

@end


ইয়েদির উত্তরের সুইফট ৪.২ সংস্করণ

let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 80, height: 30))
imageView.image = image
imageView.widthAnchor.constraint(equalToConstant: 80).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 30).isActive = true
imageView.contentMode = .scaleAspectFit
navigationItem.titleView = imageView

Swiftify সাহায্যে রূপান্তরিত।


UILayoutFittingExpandedSize সেট করা UILayoutFittingExpandedSize কাজ করে


স্ট্যান্ডার্ড ইউআইএসইচবার / ইউআইএসকিউস কন্ট্রোলার ব্যবহার করে দেখুন

আসলে আপনার যা করা দরকার - আপনি যদি কোনও স্ট্যান্ডার্ড ইউআইসন্ধানবার / একটি ইউআইএস সার্চ কন্ট্রোলার ব্যবহার করতে পারেন তবে অনুসন্ধান বারটি নীচের উপায়ে প্রদর্শন করা উচিত যা নিরাপদ অঞ্চলটিকে সম্মান করে এবং এইভাবে আইফোন এক্স এবং প্রতিটি ডিভাইস অভিযোজনে নিখুঁত দেখাচ্ছে:

func presentSearchController() {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.text = "any text"

    if #available(iOS 11.0, *) {
        self.navigationItem.searchController = searchController
        searchController.isActive = true
    } else {
        present(searchController, animated: true, completion: nil)
    }
}

তথ্যসূত্র

https://developer.apple.com/videos/play/fall2017/201/ https://medium.com/@PavelGnatyuk/large-title-and-search-in-ios-11-514d5e020cee







navigationitem