ios - update - itunessetup 1




আমার UITableView এর শীর্ষে অতিরিক্ত প্যাডিং কেন রয়েছে আইটিআইটিএবল ভিউ স্টাইল IOS7 এ গোষ্ঠীযুক্ত (20)

@ আরিলিয়ান পোর্টের উত্তর দেওয়ার জন্য ধন্যবাদ। এখানে আমার সমাধান

এই সমস্যার কারণ: -

  1. একটি UITableView 0.0 উচ্চতা সঙ্গে একটি হেডার আছে না চান। আপনি যা করার চেষ্টা করছেন তা যদি 0 এর উচ্চতার সাথে শিরোনাম থাকে তবে আপনি সমাধানটিতে যেতে পারেন।
  2. এমনকি পরে যদি আপনি আপনার শিরোনামের একটি অ 0.0 উচ্চতা বরাদ্দ করেন, তবে UITableView প্রথমে 0.0 এর উচ্চতা সহ শিরোনাম বরাদ্দ করা পছন্দ করে না।

ViewDidLoad এ: -

self.edgesForExtendedLayout = UIRectEdge.None

self.automaticallyAdjustsScrollViewInsets = false

এরকম কিছু করার দরকার নেই: -

self.myTableview.contentInset = UIEdgeInsetsMake(-56, 0, 0, 0)

heightForHeaderInSection প্রতিনিধি: -

if section == 0
    {
        return 1
    }
    else
    {
        return 40; // your other headers height value
    }

viewForHeaderInSection প্রতিনিধি: -

if section == 0 
{  
   // Note CGFloat.min for swift
   // For Objective-c CGFLOAT_MIN 
   let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.myShaadiTableview.bounds.size.width, CGFloat.min)) 
   return headerView
}
else
{ 
   // Construct your other headers here 
}

UITableView 7 এ শুরু হচ্ছে, আমার UITableView এর উপরে অতিরিক্ত স্থান রয়েছে যার একটি স্টাইল UITableViewStyleGrouped

এখানে একটি উদাহরণ:

টেবিলভিউটি প্রথম তীরতে শুরু হয়, অচেনা প্যাডিংয়ের 35 পিক্সেল থাকে, তারপরে সবুজ viewForHeaderInSection একটি viewForHeaderInSection (যেখানে সেটি 0 হয়) দ্বারা ফেরত দেওয়া হয়।

এই 35 পিক্সেলের পরিমাণ কোথা থেকে আসছে এবং কীভাবে আমি UITableViewStylePlain স্যুইচ ছাড়াই এটি পরিত্রাণ পেতে পারি তা ব্যাখ্যা করতে পারেন?


অ্যাপল দ্বারা iOS7 এর জন্য এই ট্রানজিট গাইড অনুসারে, স্ক্রোল ভিউ এর সামগ্রী ইনসেটগুলি স্বয়ংক্রিয়ভাবে সমন্বয় করা হয়। স্বয়ংক্রিয়ভাবে ডিফল্ট মান AdjustsScrollViewInsets YES সেট করা হয়।

UIViewController যা UITableView আছে এই সম্পত্তি NO তে সেট করা উচিত।

self.automaticallyAdjustsScrollViewInsets = NO;

এই কৌতুক করতে হবে।

সম্পাদনা 1:

এছাড়াও, এক চেষ্টা করতে পারে -

self.navigationController.navigationBar.translucent = YES;

এটি শীর্ষে অতিরিক্ত প্যাডিং সরিয়ে দেয়।


আনলক করুন "স্ক্রোল ভিউ আনসেট সামঞ্জস্য করুন"


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

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

এটি সম্ভবত একটি মার্জিত সমাধান নয় কিন্তু আমার জন্য কাজ করে

সুইফ্ট সংস্করণ:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

আমার ক্ষেত্রে এই কি আমাকে সাহায্য করেছিল। আমি ios6 সমর্থন করছি।

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars = NO;
    self.automaticallyAdjustsScrollViewInsets = NO;
}

আমার জন্য কাজ যে একমাত্র জিনিস ছিল:

সুইফ্ট :

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

উদ্দেশ্য-সি :

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 0;

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

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 0.01))

আমি অনুমান করছি যে এটি কেবল নতুন UITableViewStyleGrouped স্টাইলিংয়ের অংশ। এটি সমস্ত গোষ্ঠী টেবিলের মতামতগুলিতে এবং সেই স্থানটি নিয়ন্ত্রণ করার জন্য কোনও সরাসরি উপায় বলে মনে হচ্ছে না।

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

সমস্ত সাবউইউউকে অনুসন্ধান করার জন্য (আউটপুটটি পড়ার জন্য এটি সহজতর করার জন্য টেবিলের কোনও ঘর থাকলে আমি এই কোডটি চালাব):

- (void)listSubviewsOfView:(UIView *)view {

    // Get the subviews of the view
    NSArray *subviews = [view subviews];

    // Return if there are no subviews
    if ([subviews count] == 0) return;

    for (UIView *subview in subviews) {

        NSLog(@"%@", subview);

        // List the subviews of subview
        [self listSubviewsOfView:subview];
    }
}

আমি আমার আসল বাগটির কারণ খুঁজে পেয়েছি এবং এটি দেখানো একটি নমুনা প্রকল্প তৈরি করেছি। আমি একটি iOS7 বাগ আছে বিশ্বাস।

আইওএস 7 হিসাবে, যদি আপনি গ্রুপেড স্টাইলের সাথে একটি UITableView তৈরি করেন তবে প্রথম লেআউটটিতে একটি প্রতিনিধি সেট না থাকে তবে আপনি একটি প্রতিনিধি সেট করেন এবং পুনরায় লোড ডেটাকে কল করুন, শীর্ষস্থানে 35px স্পেস থাকবে যা কখনও চলে যাবে না।

এই প্রকল্পটি দেখুন আমি বাগ প্রদর্শনের জন্য তৈরি করেছি: https://github.com/esilverberg/TableViewDelayedDelegateBug

বিশেষ করে এই ফাইলটি: https://github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m

লাইন 24 সক্রিয় থাকলে,

[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];

উপরে অতিরিক্ত 35 পিএক্স স্পেস থাকবে। লাইন 27 সক্রিয় এবং 24 মন্তব্য করা হয়,

self.tableView.delegate = self;

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


আমি নিম্নলিখিত দ্বারা সাহায্য করা হয়েছিল:

YouStoryboard.storyboard> YouViewController> বৈশিষ্ট্য পরিদর্শক> আনচেক করুন - স্ক্রোল ভিউ আনসেট সামঞ্জস্য করুন।


আমি মনে করি UIEdgeInsets -35 0 0 0 ক্লান্তিকর। আমার ক্ষেত্রে, আমি টেবিল ভিউ প্রয়োগ করেছি: heightForHeaderInection: পদ্ধতি এবং এটি 0 প্রদান করার সম্ভাবনা রয়েছে।

যখন আমি 0 থেকে 0.1f তে পরিবর্তন করেছি, তখন সমস্যাটি চলে গেছে।


উপরে আগের উত্তর অনেক হ্যাকি। যদি অ্যাপল এই অপ্রত্যাশিত আচরণটি ঠিক করতে চায় তবে তারা ভবিষ্যতে যে কোনো সময় বিরতি দেবে।

ইস্যুর মূল কারণ:

  1. একটি UITableView 0.0 উচ্চতা সঙ্গে একটি হেডার আছে না চান। আপনি যা করার চেষ্টা করছেন তা যদি 0 এর উচ্চতার সাথে শিরোনাম থাকে তবে আপনি সমাধানটিতে যেতে পারেন।

  2. এমনকি পরে যদি আপনি আপনার শিরোনামের একটি অ 0.0 উচ্চতা বরাদ্দ করেন, তবে UITableView প্রথমে 0.0 এর উচ্চতা সহ শিরোনাম বরাদ্দ করা পছন্দ করে না।

সমাধান:

তারপরে, সবচেয়ে সহজ এবং নির্ভরযোগ্য ফিক্সটি আপনার হেডারের উচ্চতাটি 0 টি আপনার টেবিলের দৃশ্যতে বরাদ্দ করার সময় নয় তা নিশ্চিত করার জন্য।

এই মত কিছু কাজ করবে:

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFLOAT_MIN)];
self.tableView.tableHeaderView = tableViewHeaderView;

এই মত কিছু কিছু সময়ে সমস্যা হতে পারে (সাধারণত, একটি স্ক্রোল পরে):

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
self.tableView.tableHeaderView = tableViewHeaderView;

এই এক ব্যবহার আমি এই সাহায্য মনে করি ...

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
 {
    return 0.005f;// set this according to that you want...
 }

গোষ্ঠীযুক্ত টেবিলভিউ ব্যবহার করার সময় উইলএপিপিয়ার দেখুন সীমানা কাটা এড়ানোর জন্য এটি ব্যবহার করুন

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);

তাই আমি এখানে প্রত্যেক পদ্ধতি চেষ্টা ছিল, এবং এই সময় তাদের কেউ সাহায্য করেনি। আমার tableViewHeader iOS- এ একটি গোষ্ঠীযুক্ত টেবিল দৃশ্য ছিল। আমি আসলেই জানি না কেন এবং আমি কীভাবে এটি খুঁজে পেয়েছি, কিন্তু আমার জন্য, একটি tableViewHeader সহ tableViewHeader কমপক্ষে 0.01 উচ্চতা দিয়ে কাজ করা হয়েছে। CGRectZero সাহায্য করেনি, কিছুই সত্যিই সাহায্য করেছে:

tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.01))

শুধু আপনার ভিউতে আপনার ভিউডডলয়ে নিম্নলিখিতটি যোগ করুন:

self.automaticallyAdjustsScrollViewInsets = NO;

সুইফ্ট: আইওএস স্ক্রোল ভিউতে টেবিলভিউ ছিল। যখন আমি একই পর্দায় "পিছনে" ক্লিক করলাম। স্ক্রোল ভিউ শীর্ষে আরো স্থান লাগবে .. এটি সমাধান করার জন্য আমি ব্যবহার করেছি:

 self.automaticallyAdjustsScrollViewInsets = false

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


সুইফ্ট 3 ব্যবহার করে এটি iOS 10 এর সমাধান:

আপনি UITableViewDelegate থেকে নিম্নলিখিত পদ্ধতিগুলি প্রয়োগ করে শীর্ষ এবং নিচের UITableViewDelegate পরিত্রাণ পেতে পারেন।

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{ 
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
{
   return CGFloat.leastNormalMagnitude
}

স্টোরিবোর্ড:

শুধু আনচেক করুন: কন্ট্রোলারের বিকল্পগুলিতে Adjust Scroll View Insets করুন

কোড:

self.automaticallyAdjustsScrollViewInsets = false

override func viewWillAppear(animated: Bool) {
        self.edgesForExtendedLayout = UIRectEdge.None

 //  OR

self.sampleTableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

   //OR

 self.automaticallyAdjustsScrollViewInsets = false
        }

self.automaticallyAdjustsScrollViewInsets = NO;

চেষ্টা করুন, আপনি এটি মোকাবেলা করতে পারেন!





ios7