ইউআইটিএবলভিউহাইডারফুটারভিউ: পটভূমির রঙ পরিবর্তন করতে অক্ষম


124

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

ইউআইটিএবল ভিউহাইডারফুটারভিউতে পটভূমির রঙ সেট করা অবহেলা করা হয়েছে। পরিবর্তে কন্টেন্টভিউ.ব্যাকগ্রাউন্ড কালার ব্যবহার করুন।

তবে, নিম্নলিখিত বিকল্পগুলির কোনওটিই কাজ করে না:

myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];

আমি xib ফাইলেও ভিউটির পটভূমি রঙ পরিবর্তন করার চেষ্টা করেছি।

কোনও পরামর্শ? ধন্যবাদ।


2
আইওএস 13 এ, কন্টেন্ট ভিউ.ব্যাকগ্রাউন্ড কালার আমার জন্য কাজ করেছে। আমি মনে করি অ্যাপল এটি আপডেট করেছে
Tà Truhoada

উত্তর:


94

আপনি হয় myTableViewHeaderFooterView.tintColor ব্যবহার করা উচিত, অথবা myTableViewHeaderFooterView.backগ্রাউন্ডভিউতে একটি কাস্টম ব্যাকগ্রাউন্ড ভিউ বরাদ্দ করুন।


2
myTableViewHeaderFooterView.tintColor পুরোপুরি কাজ করে। উত্তর করার জন্য ধন্যবাদ!
চাঁদ

15
কেন জানি না, তবে আমার জন্য tintColoriOS7 এ কাজ করছে না। আমি কেবল কাস্টম ভিউ বরাদ্দ myTableViewHeaderFooterView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]];
করেই

7
টিন্ট কালার ব্যাকগ্রাউন্ড কালার নয় !!
জোও নুনস

189

আইওএস 8, 9, 10, 11 ...

যে কোনও রঙ সেট করার একমাত্র উপায় (যে কোনও আলফা সহ) ব্যবহার করা backgroundView:

দ্রুতগতি

self.backgroundView = UIView(frame: self.bounds)
self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)

OBJ-সি

self.backgroundView = ({
    UIView * view = [[UIView alloc] initWithFrame:self.bounds];
    view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5];
    view;
    });

মন্তব্যে প্রতিক্রিয়া

  • এই অন্য কোনও বিকল্প নির্ভরযোগ্যভাবে কাজ করে না (নীচের মন্তব্য সত্ত্বেও)

    // self.contentView.backgroundColor = [UIColor clearColor];
    // self.backgroundColor = [UIColor clearColor];
    // self.tintColor = [UIColor clearColor];
    
  • backgroundViewস্বয়ংক্রিয়ভাবে মাপ পরিবর্তন করা হয়। (বাধা যুক্ত করার দরকার নেই)

  • UIColor(white: 0.5, alpha: 0.5)বা সাথে আলফা নিয়ন্ত্রণ করুন backgroundView.alpha = 0.5
    (অবশ্যই, যে কোনও রঙ করবে)

  • এক্সআইবি ব্যবহার করার সময় , রুট ভিউ এ তৈরি করুন UITableViewHeaderFooterViewএবং backgroundViewপ্রোগ্রামটিমেটিকভাবে সংযুক্ত করুন :

    নিবন্ধনের সাথে:

    tableView.register(UINib(nibName: "View", bundle: nil),
                       forHeaderFooterViewReuseIdentifier: "header")
    

    এর সাথে লোড করুন:

    override func tableView(_ tableView: UITableView,
                            viewForHeaderInSection section: Int) -> UIView? {
        if let header =
            tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") {
            let backgroundView = UIView(frame: header.bounds)
            backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
            header.backgroundView = backgroundView
            return header
        }
        return nil
    }
    

ডেমো

↻ পুনরায় খেলা অ্যানিমেশন

It গিটহাবের এই সমাধান এবং সুইফ্ট রেসিপিগুলির অতিরিক্ত বিশদটি সন্ধান করুন ।


5
কন্টেন্টভিউ এর কারণ নেই। টিন্টকলারটি ভিউটিকে এর পটভূমিতে নয় বরং রঙ করতে হবে। এবং ব্যাকগ্রাউন্ড কালার হ্রাস করা হয়। সুতরাং আপনার উপায় এটি কাজ করার উপায়। বিটিডব্লু চমৎকার কোড বাক্য গঠন
জোও নুনস

@ জোওনুনস, সি # / জামারিনের সাথে বাক্য গঠনটি আরও সুন্দর:view.BackgroundView = new UIView(view.Bounds) { BackgroundColor = UIColor.Clear };
ক্রিশোজ

এক্সকোড 6.1.1 এ আপনি একটি রান-টাইম কনসোল সতর্কতা পেয়েছেন:Setting the background color on UITableViewHeaderFooterView has been deprecated. Please use contentView.backgroundColor instead.
অ্যালবার্ট বোরি

Xcode6.2 বিটা 5 দিয়ে আমি এখনও একই সতর্কতা পেয়েছি। আমার ইউটিআইটিবেল ভিউহাইডারফুটারভিউয়ের পদ্ধতিটি লোডিং এক্সিবের উপর ভিত্তি করে যা অ্যাপল স্যাম্পল কোড, টিভিঅ্যানিমেশনস জেস্টচারের অনুরূপ। তবে, Xcode6.2b5 সহ TVAnimationGestures কোনও সতর্কতা বার্তা উত্পন্ন করে না। অ্যাপল কোডের মোটেও 'ব্যাকগ্রাউন্ড' স্ট্রিং নেই। অবশ্যই, ইউটিবেবলউইউহইডারফুটারভিউ.কন্টেন্টভিউ টিভিঅ্যানিমেশনস জেস্টারে নেই। আমি কেন বুঝতে পারছি না কেন?
কিউমুগিতানি

7
এখনও সেই সতর্কবার্তাটি পাওয়া লোকদের জন্য: নিশ্চিত করুন যে UITableViewHeaderFooterView এর IB তে ব্যাকগ্রাউন্ড কালার সেট নেই।
তুষলরেব

24

আইওএস 7 contentView.backgroundColorআমার জন্য কাজ করে, tintColorনা।

   headerView.contentView.backgroundColor = [UIColor blackColor];

যদিও clearColorআমার পক্ষে কাজ করে নি, আমি যে সমাধানটি পেয়েছি তা হ'ল backgroundViewসম্পত্তি স্বচ্ছ ইমেজে সেট করা । হতে পারে এটি কাউকে সহায়তা করবে:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];

আমি মনে করি @SwiftArchitect এর উত্তর (যদিও এটি কাজ করেছে) এর চেয়ে এটি একটি ভাল পদ্ধতির। আপনাকে নতুন ইউআইভিউ যুক্ত করতে হবে না তা এটিকে আরও ভাল করে তোলে। আমার জন্য নিখুঁতভাবে কাজ করেছেন।
এরিক এ। মন্টায়েজ

14

আপনি এর contentViewজন্য ব্যাকগ্রাউন্ড কালার সেট করেছেন তা নিশ্চিত করুন UITableViewHeaderFooterView:

self.contentView.backgroundColor = [UIColor whiteColor];

তাহলে এটা কাজ করবে।


আইওএস> = 10 কেবল !. IOS জন্য <10 ব্যবহার:? BackgroundView .backgroundColor = UIColor.white
পিটার Kreinz

12

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

এটিতে পরিবর্তন হয়েছে


7

পরিষ্কার রঙের জন্য, আমি ব্যবহার করি

self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];

এটা আমার কাছে ভাল লাগছে।


1
সেট করা backgroundView = UIView()এবং তারপরেই backgroundColor = .clearছিল একমাত্র কার্যক্ষম সমাধান। ধন্যবাদ.
16:57

7

দৃ background় ব্যাকগ্রাউন্ড রঙের জন্য, সেটিংসটি contentView.backgroundColorযথেষ্ট হওয়া উচিত:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .red // Works!
    }
}

রঙ সহ স্বচ্ছতা সহ রঙগুলির জন্য .clear, এটি আর কাজ করে না:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .clear // Does not work 😞
    }
}

সম্পূর্ণ স্বচ্ছ বিভাগের শিরোনামের জন্য, backgroundViewসম্পত্তিটি খালি দৃষ্টিতে সেট করুন :

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.backgroundView = UIView() // Works!
    }
}

তবে সম্ভাব্য পার্শ্ব প্রতিক্রিয়া থেকে সাবধান থাকুন। সারণী দর্শনটি "গোষ্ঠীযুক্ত" এ সেট না করা না থাকলে স্ক্রল করার সময় বিভাগের শিরোনামগুলি শীর্ষে স্ন্যাপ করবে। বিভাগের শিরোনামগুলি স্বচ্ছ হলে, সেল সামগ্রীর মধ্য দিয়ে দেখা যাবে, যা দুর্দান্ত দেখাচ্ছে না।

এখানে বিভাগের শিরোনামগুলির স্বচ্ছ পটভূমি রয়েছে:

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

এটি প্রতিরোধ করতে, বিভাগ সারণির পটভূমিটিকে আপনার সারণী দর্শন বা দেখুন নিয়ামকের পটভূমির সাথে মিলে যাওয়া একটি শক্ত রঙ (বা গ্রেডিয়েন্ট) এ সেট করা ভাল।

এখানে বিভাগের শিরোনামগুলির পুরোপুরি অস্বচ্ছ গ্রেডিয়েন্ট পটভূমি রয়েছে:

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


জিনিয়াস! ব্যাকগ্রাউন্ডের জন্য একটি খালি ইউআইভিউ সংজ্ঞা দেওয়া আমার জন্য সমস্যাটি সম্পূর্ণ সমাধান করেছে! ধন্যবাদ!
লুইজ ডায়াস

6

এখানে চিত্র বর্ণনা লিখুনইন্টারফেস বিল্ডারে আপনার .xib টানুন উপরের উপাদানটিতে, অ্যাট্রিবিউট ইন্সপেক্টর পটভূমির রঙটি ডিফল্ট হিসাবে সেট করে। তারপরে কনটেন্ট ভিউতে যান এবং সেখানে পটভূমির রঙ সেট করুন ( https://github.com/jiecao-fm/SwiftTheme/issues/24 উল্লেখ )।


4

উপর iOS9 headerView.backgroundView.backgroundColor আমার জন্য কাজ:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
    headerView.backgroundView.backgroundColor = [UIColor redColor];
}

উপর iOS8 আমি ব্যবহার করছিলেন headerView.contentView.backgroundColorসমস্যা ছাড়াই, কিন্তু এখন iOS 9 এর সঙ্গে, আমি একটি অদ্ভুত সমস্যাটি হল এই যে পটভূমির রঙ তৈরি কক্ষের পুরো স্থান পূরণ না পেয়ে ছিল। সুতরাং আমি ঠিক চেষ্টা headerView.backgroundColorকরেছি এবং ওপি থেকেও আমি একই ত্রুটি পেয়েছি।

ইউআইটিএবল ভিউহাইডারফুটারভিউতে পটভূমির রঙ সেট করা অবহেলা করা হয়েছে। পরিবর্তে কন্টেন্টভিউ.ব্যাকগ্রাউন্ড কালার ব্যবহার করুন।

সুতরাং এখন সমস্ত কিছু দুর্দান্ত ব্যবহার করে এবং সতর্কতা ছাড়াই ব্যবহার করে headerView.backgroundView.backgroundColor


4

আপনি যদি ফাইল UITableViewHeaderFooterViewসহ একটি কাস্টম সাবক্লাস তৈরি করেন xibতবে আপনার ওভাররাইড করা উচিত setBackgroundColor। খালি রাখো।

-(void)setBackgroundColor:(UIColor *)backgroundColor {

}

এবং এটি আপনার সমস্যার সমাধান করবে।


এটা আমার জন্য সঠিক উত্তর। চিন্তিত আমি আমার শিরোনামফুটারভিউতে কোনও ব্যাকগ্রাউন্ড রঙ সেট করি না তবে সতর্কতা বার্তাটি আমার কনসোল লগের মধ্যে চলে আসে। খুব বিরক্তিকর!
স্ট্যান লু

4

আপনি যদি স্টোরিবোর্ড / নিব দিয়ে একটি বিভাগ শিরোনাম ঘরটি কাস্টমাইজ করছেন তবে নিশ্চিত হয়ে নিন যে "সারণী বিভাগের শিরোনাম" দর্শনের জন্য পটভূমির রঙ ডিফল্ট রয়েছে

এবং যদি আপনি সাবক্লাস করেন UITableViewHeaderFooterView, এবং নিব ব্যবহার করেন, তবে আপনাকে যা করতে হবে তা হল IBOutletবিষয়বস্তু দেখার জন্য একটি তৈরি করা , এবং এর নামকরণ করা। containerView। এটির সাথে বিভ্রান্ত হওয়ার দরকার নেই contentView, যা এই ধারক দর্শনটির পিতামাতা।

সেই সেটআপের সাহায্যে আপনি এর containerViewপরিবর্তে পটভূমির রঙ পরিবর্তন করেন ।


1

আমি চেহারার সাথে চেষ্টা করেছি, যখন কনটাইনড ইন চেইন, এবং এটি আমার পক্ষে কাজ করেছিল।

[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] 
         setBackgroundColor: [UIColor.grayColor]];

1

হতে পারে কারণ ব্যাকগ্রাউন্ডভিউয়ের অস্তিত্ব নেই

override func draw(_ rect: CGRect){
    // Drawing code
    let view = UIView()
    view.frame = rect
    self.backgroundView = view
    self.backgroundView?.backgroundColor = UIColor.yourColorHere
}

যে আমার জন্য কাজ।


1

আইওএস 12, সুইফট 5. যদি আপনি উপস্থিতি প্রক্সি ব্যবহার করতে ইচ্ছুক হন (বা চেষ্টা করছেন!), নিম্নলিখিত সমাধানটি কাজ করে:

  1. সাবক্লাস ইউআইটিএবলভিউ হিডারফুটারভিউ এবং আপনার নিজের উপস্থিতি প্রক্সি সেটিংস প্রকাশ করুন।
final class MySectionHeaderView: UITableViewHeaderFooterView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }

    @objc dynamic var forceBackgroundColor: UIColor? {
        get { return self.contentView.backgroundColor }
        set(color) {
            self.contentView.backgroundColor = color
            // if your color is not opaque, adjust backgroundView as well
            self.backgroundView?.backgroundColor = .clear
        }
    }
}
  1. আপনার কাঙ্ক্ষিত গ্রানুলারিটিতে উপস্থিতি প্রক্সি সেট করুন।
MySectionHeaderView.appearance().forceBackgroundColor = .red

অথবা

MySectionHeaderView.appearance(whenContainedInInstancesOf: [MyOtherClass.self]).forceBackgroundColor = .red

1

অসুবিধা সম্পর্কে ভুলে যান।

UITableViewHeaderFooterView+BGUpdate.swiftনীচে কোড সহ আপনার প্রকল্পে যুক্ত করুন :

extension UITableViewHeaderFooterView {

    open override var backgroundColor: UIColor? {
        get {
            return self.backgroundColor
        }
        set {
            let bgView = UIView()
            bgView.backgroundColor = newValue
            backgroundView = bgView
        }
    }
}

আপনি পূর্বে প্রত্যাশা মতো ব্যবহার সহজ:

headerView.backgroundColor = .red

ব্যবহারের উদাহরণ :

1) প্রতিনিধি এর মধ্যে tableView:viewForHeaderInSection::

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = tv.dequeueReusableHeaderFooterView(withIdentifier: "MyHeaderView")
    headerView.backgroundColor = .red // <- here
    return headerView
}

অথবা

2) আপনার কাস্টম হেডার দর্শন শ্রেণিতে:

class MyHeaderView: UITableViewHeaderFooterView {

    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = .red // <- here
    }
}

ঠিক আছে ... আপনার উপায় আরও ভাল। :) ধন্যবাদ
এলি বার্ক

1
এই সমাধানটি আইওএস 12 এ একটি পুনরাবৃত্ত লুপ তৈরি করে
কোপপ্যাসেটিক

0

পরিষ্কার রঙের সাথে ব্যাকগ্রাউন্ডভিউ সেট করা দৃশ্যমান শিরোনামগুলির জন্য দুর্দান্ত কাজ করে। টেবিলটি নীচে শিরোনামগুলি দেখানোর জন্য স্ক্রোল করা থাকলে, এই সমাধানটি ব্যর্থ হয়।

PSMy টেবিলটিতে কোনও সেল ছাড়া কেবল শিরোনাম থাকে।


0

সুইফট:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
    var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
    headerView.backgroundView.backgroundColor = UIColor.redColor()
}

0

ইউআইভিউ তৈরি করুন এবং পটভূমির রঙ সেট করুন, তারপরে এটিকে স্ব.ব্যাকগ্রাউন্ডভিউতে সেট করুন।

- (void)setupBackgroundColor:(UIColor *) color {
    UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
    bgView.backgroundColor = color;
    self.backgroundView = bgView;
}

0

আমি আমার অভিজ্ঞতা ভাগ করতে বাধ্য। আমার কাছে এই কোডের টুকরা ছিল যা আইওএস 10 এবং আইওএস 11 এর সাথে দুর্দান্ত কাজ করেছেheaderView?.contentView.backgroundColor = .lightGray

তারপরে আমি হঠাৎ করেই iOS 9 এর জন্য অ্যাপ স্থাপন করার সিদ্ধান্ত নিয়েছিলাম কারণ কিছু ডিভাইস রয়েছে (আইপ্যাড মিনি কিছু পুরানো প্রজন্ম 9 এর বাইরে কোনও ওএসে আপডেট করে না) - সমস্ত আইওএস 9, 10 এবং 11 এর জন্য কাজ করা একমাত্র সমাধান শিরোনামের জন্য বেস ভিউটি সংজ্ঞায়িত করা হয়েছিল যা তারপরে অন্যান্য সমস্ত শিরোনামের পূর্বরূপগুলি রাখে, স্টোরিবোর্ড থেকে তারটি বেঁধে দেয় backgroundColorএবং সেই বেস ভিউটির সেট করে ।

আউটলেটটি কল না করার জন্য ওয়্যারিং করার সময় আপনি সচেতন হতে চাইবেন: backgroundViewকারণ ইতিমধ্যে কারও কারও মধ্যে সেই নামের একটি সম্পত্তি রয়েছে superclass। আমি আমার ফোনcontainingView

এছাড়াও আউটলেট নিয়ন্ত্রণের ওয়্যারিংয়ের সময় এটিটি Document Outlineতারযুক্ত নয় তা নিশ্চিত করার জন্য ভিউতে ক্লিক করুনfile owner


0
let bgView = UIView()
bgView.backgroundColor = UIColor.clear
backgroundView = bgView
backgroundColor = UIColor.clear
contentView.backgroundColor = UIColor.clear

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