দলবদ্ধ শৈলীতে কোনও ইউআইটিএবলভিউতে কোনও ঘরের প্রস্থ কীভাবে সেট করবেন


107

আমি প্রায় 2 দিন ধরে এটি নিয়ে কাজ করছি, তাই আমি ভেবেছিলাম আমি আমার শিক্ষাগুলি আপনার সাথে ভাগ করে নিই।

প্রশ্নটি হল: গোষ্ঠীযুক্ত ইউআইটিবেবল ভিউতে কোনও ঘরের প্রস্থ কী ছোট করা সম্ভব?

উত্তর: না।

তবে এই সমস্যাটি ঘিরে ধরার দুটি উপায় রয়েছে।

সমাধান # 1: একটি পাতলা টেবিলটি টেবিলভিউয়ের ফ্রেম পরিবর্তন করা সম্ভব, যাতে টেবিলটি ছোট হয়। এর ফলে ইউআইটিএবলভিউ হ্রাস প্রস্থের সাথে কক্ষটি ভিতরে উপস্থাপন করবে।

এর সমাধানটি এর মতো দেখতে পাওয়া যাবে:

-(void)viewWillAppear:(BOOL)animated
{
    CGFloat tableBorderLeft = 20;
    CGFloat tableBorderRight = 20;

    CGRect tableRect = self.view.frame;
    tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
    tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
    tableView.frame = tableRect;
}

সমাধান # 2: চিত্রগুলি দ্বারা সেলগুলি রেন্ডার করা

এই সমাধান এখানে বর্ণিত হয়: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

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


3
আমি মনে করি এটি কেবল দ্বিতীয় লাইনের ("প্রশ্নটি: ...") দিয়ে একটি প্রশ্ন হিসাবে সেট আপ করা উচিত ছিল, তারপরে সমাধান # 1 এবং সমাধান # 2 দুটি পৃথক উত্তর হিসাবে পোস্ট করেছে, যার একটি গ্রহণযোগ্য হয়েছে accepted তারপরে যদি অন্য ব্যবহারকারীরা তাদের নিজস্ব উত্তর যুক্ত করেন এবং তাদের মধ্যে একটির উন্নতি ভাল হয় তবে গ্রহণযোগ্য উত্তরগুলি পরে পরিবর্তন করা যেতে পারে।
জেনারেল মাইক

উত্তর:


226

এটি অর্জনের একটি আরও ভাল এবং পরিষ্কার উপায় হ'ল ইউআইটিএবলভিউসেলকে সাবক্লাসিং করা এবং এর -setFrame:পদ্ধতিটিকে এর মতো করে ওভাররাইড করা :

- (void)setFrame:(CGRect)frame {
    frame.origin.x += inset;
    frame.size.width -= 2 * inset;
    [super setFrame:frame];
}

কেন এটা ভাল? কারণ অন্য দু'জনের অবস্থা আরও খারাপ।

  1. এর মধ্যে সারণী দর্শন প্রস্থ সামঞ্জস্য করুন -viewWillAppear:

    প্রথমত, এটি অবিশ্বাস্য, সুপারভিউ বা প্যারেন্ট ভিউ কন্ট্রোলার -viewWillAppear:ডাকা হওয়ার পরে টেবিল ভিউ ফ্রেমটি আরও সামঞ্জস্য করতে পারে । অবশ্যই, আপনি -setFrame:ইউআইটিএবলভিউকেলগুলির জন্য এখানে আমি যা করি ঠিক তেমনই আপনি আপনার ইউআইটিএবলভিউয়ের জন্য সাবক্লাস এবং ওভাররাইড করতে পারেন । তবে, ইউআইটিএবলভিউকেলগুলি সাবক্লাসিং করা অনেক সাধারণ, হালকা এবং অ্যাপল উপায়।

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

  2. সংকীর্ণ প্রস্থকে নকল করতে কাস্টম সেল রেন্ডারিং

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


2
এটি একটি দুর্দান্ত এবং মার্জিত সমাধান, আমি এটি একটি বিভাগে করেছিলাম :) আমি আরও লক্ষ করব যে আরও স্বচ্ছ বস্তু, আরও সিপিইউ লোড :)
মিস্টার কোজ

11
@ মিস্টারকোজ - একটি সতর্কতার শব্দ: কিছু আইওএস নিয়ন্ত্রণ (নির্দিষ্ট হিসাবে ইউআইডিটপিকার) অভ্যন্তরীণভাবে ইউআইটিএবলভিউকেল ব্যবহার করে এবং যদি আপনি এটি কোনও বিভাগে প্রয়োগ করেন তবে বিরতি।
ক্লাফু

7
সম্পাদনা মোডে কোনও ঘর সরানোর চেষ্টা করার সময় এই পদ্ধতিটি iOS8 এ কাজ করছে বলে মনে হয় না। আপনি সম্পাদনা মোডে প্রবেশ / প্রস্থান করার সময় সেট ফ্রেমটি কল হয়ে যায় যাতে ঘর সঙ্কুচিত হতে থাকে। এর কোন সমাধান?
জন বাম

3
: এই শক্তি সহায়তা (আমার ক্ষেত্রে অন্তত এটা কাজ করে) @JohnBaum stackoverflow.com/questions/25911484/ios-8-cell-resizing/...
HashtagMarkus

2
এই সমাধানটি সত্যই গডসেন্ড। যদি কেউ কেউ কীভাবে তাড়াহুড়ো
sysuser

16

সুইফটে এটি করতে, যা ভেরিয়েবল সেট করার পদ্ধতি সরবরাহ করে না, আপনাকে সেটারটি ওভাররাইড করতে হবে frame। মূলত (অন্তত আমি কোথায় তা পাওয়া এ) পোস্ট এখানে

override var frame: CGRect {
    get {
        return super.frame
    }
    set (newFrame) {
        let inset: CGFloat = 15
        var frame = newFrame
        frame.origin.x += inset
        frame.size.width -= 2 * inset
        super.frame = frame
    }
}

দ্রুতগতির জন্য কাজ করে
সাইমন ম্যাকনিল

9

যদি কিছু না কাজ করে তবে আপনি এটি চেষ্টা করতে পারেন

ঘরের ব্যাকগ্রাউন্ড রঙটি পরিষ্কার রঙ হিসাবে তৈরি করুন এবং তারপরে প্রয়োজনীয় আকারের সাথে কক্ষের একটি চিত্র দিন। আপনি যদি সেই ঘরে কিছু পাঠ্য প্রদর্শন করতে চান তবে চিত্রের উপরে একটি লেবেল রাখুন। রঙ পরিষ্কার করতে লেবেলের ব্যাকগ্রাউন্ড রঙ সেট করতে ভুলবেন না।


8

আমি পেয়েছি যে গৃহীত সমাধানটি ঘূর্ণনের উপর নির্ভর করে না। স্থির প্রস্থ এবং নমনীয় মার্জিন সহ ইউআইটিএবলভিউকেলগুলি অর্জন করতে আমি উপরের সমাধানটি স্রেফ নীচের সাথে মানিয়ে নিয়েছি:

- (void)setFrame:(CGRect)frame {

    if (self.superview) {
        float cellWidth = 500.0;
        frame.origin.x = (self.superview.frame.size.width - cellWidth) / 2;
        frame.size.width = cellWidth;
    }

    [super setFrame:frame];
}

যখনই ডিভাইসটি ঘোরানো হয় তখন পদ্ধতিটি কল হয়, তাই কোষগুলি সর্বদা কেন্দ্রীভূত থাকে।


0

স্ক্রিনটি ঘোরানোর সময় একটি পদ্ধতি বলা হয়: ভিউউইলট্রান্সিশনটোসোসাইজ

এটি আপনার ফ্রেমের আকার পরিবর্তন করতে হবে। উদাহরণ দেখুন। আপনার প্রয়োজন মতো ফ্রেম কর্ডগুলি পরিবর্তন করুন।

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
        int x = 0;
        int y = 0;
        self.tableView.frame = CGRectMake(x, y, 320, self.tableView.frame.size.height);
    }];
}

-2

আমি এটা করতে

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
    CGFloat tableBorderLeft = self.view.frame.origin.x + 10;
    CGFloat tableBorderRight = self.view.frame.size.width - 20;

    CGRect tableRect = self.view.frame;
    tableRect.origin.x = tableBorderLeft; 
    tableRect.size.width = tableBorderRight; 
    tableView.frame = tableRect;
}

এবং এটি আমার জন্য কাজ করেছে


-6

.H ফাইলে প্রতিনিধি যুক্ত করুন 'ইউআইটিএলভিউ ডেটাসোর্স'

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    return size;
}

4
তিনি উচ্চতা নয়, প্রস্থ নির্ধারণ করতে চান
ক্রিস্টোফার পিক্সলে

ওহ হু অসুবিধার জন্য sry।
ভরথ গাঙ্গুপল্লি

আপনি প্রশ্নের ভুল বুঝেছেন এবং আপনি উচ্চতার উত্তর দিয়েছেন এবং আপনি জানেন যে এটি আমার জন্য কী কাজ করছে কারণ আমি প্রস্থের জন্য নয় উচ্চতার জন্য অনুসন্ধান করছি the উত্তরের জন্য ধন্যবাদ
পূজা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.